Magit を使ってみる

## <i class="fa fa-paw fa-fw"></i>はじめに
Windows で Emacs を使うのに MSYS2 入れたりとか Patch 当てたりとか割と面倒なので， Atom や VS Code を試してみたが，どうせ Emacs のキーバインドにしたくなるので，設定やら何やらしていたら，Emacs 使う方が楽な気がしたので，現実逃避しながら，Emacs の設定をいじっていたので備忘録代わりに(>_<）．

オールドタイプなので，パッケージ管理の類を使わなかったのですが，試しに `package.el` を使ったら手放せなくなりました(>_<）オールドタイプとかのたまう前に試してみるべきでした．すごく便利です．`try.el` と併用して色々試しているところです．

試しながら，書いているので，間違ったことを書いてる場合があります．ご容赦下さい．

## <i class="fa fa-leaf fa-fw"></i> インストール
### 下準備
`init.el` に下記の設定を追加して，`package.el` と `use-package` を使用できるようにする．`try` は，`M-x try` <kbd><kbd>Enter</kbd></kbd> `package 名` で `package` をインストールして手軽に試せます．Emacs を再起動すると `try` から導入した `package` は使えなくなります．いらないパッケージが残らないので精神衛生上助かりますね．ちなみに，`TEMP` フォルダに展開されるので，気になるなら消しましょう．私は，そこまでは気にならないので，自動削除される日までほっときます．

```el:init.el
;;; package.el
(require 'package)
(setq package-enable-at-startup nil)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))

;;(package-refresh-contents)
(package-initialize)

;;; Bootstrap 'use-package
(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))

(use-package try
  :ensure t)
```

### Magit の導入
MSYS2 で導入した `git` は使えなかったので，[Git for Windows](https://git-for-windows.github.io/) を導入しました．`Git Bash` や `Git Cmd` から使うので，環境変数に `PATH` の追加はしていません．(`Git` のインストール先を変更しているので，試す方は，`magit-git-executable` の場所を変更して下さい．あと，設定なども適当に）

```el:init.el
(use-package magit
  :ensure t
  :defer t
  :init
  (when (eq system-type 'windows-nt)
    (setq magit-git-executable "D:/Programs/Git/bin/git.exe"))
  :bind ("C-x g" . magit-status)
  :config
  (setq magit-refs-show-commit-count 'all
        magit-log-buffer-file-locked t
        magit-revision-show-gravatars nil
        magit-display-buffer-function #'magit-display-buffer-same-window-except-diff-v1)
  )
```

追加したら，Emacs を再起動するか評価して．`Magit` を導入します．

## <i class="fa fa-leaf fa-fw"></i> [Git をはじめからていねいに](https://github.com/Shinpeim/introduction-to-git) に沿って

[Git をはじめからていねいに](https://github.com/Shinpeim/introduction-to-git) は，shinpei maruyama さんが作られたものです．この資料は，コマンドラインで Git の使い方を学べます．大変わかりやすく，作者の方に感謝してます．この資料を基に， `Magit` で操作します．

### 02_first_commit.md
`git init` では作業ディレクトリの作成が必要ですが，`magit-init` では，リポジトリの作成と同時に作られるので必要ないです．

`M-x magit-init` <kbd><kbd>Enter</kbd></kbd> `Create repository in:` でリポジトリを作成するディレクトリを指定します．ここでは，`~/Documents/my_first_worksapce` としています．ドキュメントに `my_first_workspace` ができています．Emacs には，`In the beginning there was darkness` と表示されます．

`C-x C-f` で `nyan.txt` を作成して保存する．

```:nyan.txt
nyan
```

`C-x g`(`M-x magit-status`) で Magit(status) を起動すると，`Untracked files (1)` に`nyan.txt` が表示されるので，`nyan.txt` の上にカーソルを合わせて，`s` で 追跡を開始する．`staged changes (1)` の `nyan,txt` の上で `u` を押すとステージングから外れます．

<kbd><kbd>?</kbd></kbd> でコマンド一覧が表示される．コミットしたいので，`c c` と入力する．コミットメッセージの入力画面になるので「`猫の鳴き声を管理するファイルを作成`」と入力して `C-c C-C` でコミットする．コミットしたブランチ名 `master` とコミットメッセージが表示される．

### 03_second_commit.md
`nyan.txt` を変更して，`nyan` を `mew` に変更して保存して，`C-x g` を押すと，`Unstaged change (1)` に `modified nyan.txt` と表示されるので， `nyan,txt` の上で `k` を押すと変更の取り消しができます．`nyan.txt` を確認すると `nayn` に戻ります．

`git` では，状態によって，ステージングされた状態を解除するにに，`git checkout -- nyan.txt`，`git reset HEAD nyan.txt` と使い分ける必要があるようですが，`Magit` で unstage するのは，`u` で行えます．

もう一度，`nyan` を `mew` に書き換えてコミットしてみます．`s` でステージングして `c c` でコミットメッセージ「`猫の鳴き声を nyan から mew に変更`」と入力して，`C-c C-c` でコミットする．

ログを確認するときは，`l` でメニューが表示するので項目を選択します(`l` など)．

### 04_more_commits.md
`wan.txt` と `boo.txt` をコミットする．

```:wan.txt
wan
```

```:boo.txt
boo
```

`Magit` では，`S` でまとめて，ステージングするようですが，`git add -u .` と同等で，すでに追跡しているファイルのみが対象のようです．`boo.txt`,`wan.txt` にそれぞれのカーソルの上で，`s` で追跡を開始する．コミットメッセージ「`犬と豚の鳴き声を追加`」でコミットする．

`Magit` では, `git rm` のコマンドがないようなので，`M-C-m(M-RET)` で `Dired` を開いて，`boo.txt` に 'd' でマークを付け，`x` で削除する．`q` で `Dired` から `Magit` に戻る．`g` で状態を更新して，`s` で 削除するファイルをステージングしてコミットする．コミットメッセージは「`豚の鳴き声は要らないので削除`」にする．どうしても，`git rm` したいときは，`:` からコマンドを直接入力する．

ファイルのリネームは，`?` のコマンド一覧には，表示されないようですが，`R` で変更できます．`nyan` を `mew.txt`，`wan.txt` を `bow.txt` に変更する．コミットメッセージ「`ファイル名を英語に変更`」でコミットする．

ファイルの移動は，先にディレクトリを作成する必要があり，`M-C-m` で `Dired` を開いて，`+` で `animals` のディレクトリを作成する．`R` で `mew.txt`,`bow.txt` を `animals` に移動する．コミットメッセージ「`動物ファイルを animals ディレクトリに移動`」でコミットする．

### 05_branch.md
`b n` でブランチを作成する．`Create branch starting at ...` と表示されるので，`master` のまま変更しないので, <kbd><kbd>Enter</kbd></kbd> を入力し，`Branch Name` に作成するブランチ名を入力する．ここでは，`my_first_branch` とします．`y` でブランチ一覧を表示できる．

`bow.txtt` を変更して，`wan` を `bow` に変更して，コミットメッセージ「`犬ファイルの中身も英語に合わせた`」でコミットする．コミットログを，`l L` で確認する．

ブランチの変更は，`b b` で変更する．`my_first_branch` に変更すると，`Magit`の ステータス画面のブランチ名が，`mastor` から `my_first_branch` になっているのが確認できる．また，`y` でブランチ一覧を表示して，選択するブランチ上で `C-m` で変更できる．

`my_first_branch` でコミットを行う．`b b` で `my_first_branch` に変更したので，`mow.txt` を ディレクトリ `animals` の中に作成する．

```:mow.txt
mow
```

コミットメッセージ「`牛の鳴き声を追加`」でコミットする．`l L` コミットの様子を確認する．

ブランチを `master` に切り替えると，`my_first_branch` で作成した `moe.txt` は無く．ブランチを `my_first_branch` に切り替えると，`mow.txt` が確認できます．

### 06_merge.md
ブランチを `master` に変更する．マージするには，`m m` でマージするブランチ聞かれるので，`my_first_branch`（デフォルトでなっている）を指定する．マージするコメントを編集するときは，`m e` で行える．

無事マージが終わってので，いらないブランチを `b k` で削除する．`l L` でログを確認する．


### 07_more_merges.md
少し疲れてきましたが，続きを始めます．ここからは，新しいリポジトリを作成するので，`M-x magit-init` から `my_second_workspace` を作成する．`cat_lover_said.txt` と `cat_hater_said.txt` をコミットメッセージ「`猫好きの話と犬好きの話を作成`」で作成する．

```txt:cat_lover_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。

猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われており、猫ってほんとうにかわいいですね。

もうほんとうに可愛い、猫。
猫。
猫が本当にかわいい。

猫好きじゃない人間とか頭がおかしいとしか思えない。
```

```txt:cat_hater_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。

その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。

犬は賢い。犬がいい。犬かわいい。散歩に行って息が上がった
あの「ヘッヘッヘッヘッへ」がもう私をおかしくしちゃうほんとにかわいい。

犬大好き。犬最高。

猫好きな人間とか頭がおかしいとしか思えない。
```

文体を統一するブランチ `unify_styles` を，`b c` で作成すると，ブランチを切るのと，チェックアウトを同時に行えます．ここでは，文体を直して，コミットメッセージ「`文体を統一`」でコミットします．

```txt:cat_lover_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。

猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われている。

猫というのはかように本当にかわいいものである。

猫好きではない人間は、頭がおかしいのではないだろうか。
```

```txt:cat_hater_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。

その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。

犬は賢い。やはり犬がよい。犬はかわいい。

散歩に行ったあとに息が上がっている様など、ほんとうに良いものである。

猫が好きな人間は、頭がおかしいのではないだろうか。
```

表現がおかしいのを緊急に修正する必要があるので，文体統一前に状態を戻して修正する．
取り敢えず，文体統一前のブランチ `master` に変更する．緊急に修正するブランチ `hotfix` を作成して修正する．`b c` で `hotfix` を作成する．それぞれの最後の文章を修正して，コミットメッセージ「`頭がおかしいという表現はまずいので修正`」でコミットする．

```txt:cat_lover_said.txt
猫好きじゃない人間がいるのが不思議。
```

```txt:cat_hater_said.txt
猫好きな人間がいるのが不思議。
```

修正ができたのので，`hotfix` の変更を `master` ブランチに取り込む．`master` ブランチに戻って，マージする．`m m` でマージすると `Fast-forward` になるので，一度変更を基に戻します．

`l L` でコミット ID を確認する．ここでは，「`猫好きの話と犬好きの話を作成`」の数字を確認する．`X h` で調べた ID を入力すると，HEAD(master) が元の位置に戻る．`m e` でマージすると，`--no-ff` が自動で付加されるので，`Fast-forward` したくない場合はこちらを選択すればよい．

マージが終われば，ブランチ `hotfix` は必要ないので，`b k` で削除する．

文体統一のブランチの `unify_styles` の修正が必要になったので，ブランチを `unify_styles` に変更する．`cat_hater_said.txt` を修正して，コミットメッセージ「`"ヘッヘッヘッヘッ" という表現は残すようにした`」でコミットする．

```txt:cat_hater_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。

その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。

犬は賢い。やはり犬がよい。犬はかわいい。

散歩に行ったあとに息が上がって "ヘッヘッヘッヘッ" と
なっている様など、ほんとうに良いものである。

猫が好きな人間は、頭がおかしいのではないだろうか。
```

`l L` でログを見ると時系列になってないので，'l' の後 `=o c` で `--date-order` を与えて，`L` でログを確認する．

修正の確認が終わったので，`master` に `unify_styles` の修正をマージする．`master` に切り替えて，`m e` でマージする．Error が起こったので，`$` で確認すると，コンフリクトを起こして自動でマージが行えなかったようです．マージされてないファイル(`unmerged cat_xxx.txt`)があるので修正する．変更するファイルの上で `C-m` でファイルを編集する．

```txt:cat_hater_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。

その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。

犬は賢い。やはり犬がよい。犬はかわいい。

散歩に行ったあとに息が上がって "ヘッヘッヘッヘッ" と
なっている様など、ほんとうに良いものである。

猫が好きな人間が存在するというのが、私には不思議に思える。
```

```txt:cat_lover_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。

猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われている。

猫というのはかように本当にかわいいものである。

猫好きではない人間が存在するのが、私には不思議に思える。
```

修正が終われば，`s` でステージに上げ、`c c`，`C-c C-c` でコミットする．

マージが終われば，ブランチ `unify_styles` は必要ないので，`b k` で削除する．

### 08_rebase.md
`my_third_workspace` を作成して，`cat_lover_said.txt` と `cat_hater_said.txt` をコミットメッセージ「`猫好きの話と犬好きの話を作成`」で作成する．

```txt:cat_lover_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。

猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われており、猫ってほんとうにかわいいですね。

もうほんとうに可愛い、猫。
猫。
猫が本当にかわいい。

猫好きじゃない人間とか頭がおかしいとしか思えない。
```

```txt:cat_hater_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。

その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。

犬は賢い。犬がいい。犬かわいい。散歩に行って息が上がった
あの「ヘッヘッヘッヘッへ」がもう私をおかしくしちゃうほんとにかわいい。

犬大好き。犬最高。

猫好きな人間とか頭がおかしいとしか思えない。
```

文体を統一するトピックブランチ `unify_styles` を作成する．

```txt:cat_lover_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。

猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われている。

もうほんとうに可愛い、猫。
猫。
猫が本当にかわいい。

猫好きじゃない人間とか頭がおかしいとしか思えない。
```

```txt:cat_hater_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。

その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。

犬は賢い。やはり犬がよい。犬はかわいい。

散歩に行ったあとに息が上がっている様など、ほんとうに良いものである。

犬大好き。犬最高。

猫好きな人間とか頭がおかしいとしか思えない。
```

文体統一の途中で，急ぎの修正がはいりました．中途半端な状態でコミットしたくはないですが，とりあえずコミットします．コミットメッセージは，「`作業途中だがとりあえずコミットしておく`」にします．

`master` ブランチから `hotfix` ブランチを切り，急ぎの修正を行います．`b c` でブランチ作成とチェックアウトを同時に行うのですが，`Create and checkout branch starting at(..):` で `master` を選択して，`Branch name` を `hotfix` にします．それぞれの最後の文章を修正して，コミットメッセージ「`頭がおかしいという表現はまずいので修正`」でコミットする．

```txt:cat_lover_said.txt
猫好きじゃない人間がいるのが不思議。
```

```txt:cat_hater_said.txt
猫好きな人間がいるのが不思議。
```

OK が出たので，ブランチを `master` に切り替え，`m e` で `hotfix` をマージする．いらなくなった，`hotfix` を `b k` で削除する．

`unify_styles` にチェックアウトして, `r e` で `rebase` を行う．`l L` でログを確認する．また，ファイルを確認すると，`hotfix` の変更も取り込まれています．

残りの修正を行います．

```txt:cat_lover_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。

猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われている。

猫というのはかように本当にかわいいものである。

猫好きではない人間が存在するのが、私には不思議に思える。
```

```txt:cat_hater_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っているが、冗談じゃない。
人間が猫を飼ってやっているのである。そこを勘違いする猫は
本当にダメである。

その点犬は良い。犬は人間のことを「ご主人様」だとおもって
なついてくれる。それならばこそかわいがる気も起きるというものである。

犬は賢い。やはり犬がよい。犬はかわいい。

散歩に行ったあとに息が上がって ヘッヘッヘッヘッ と
なっている様など、ほんとうに良いものである。

猫が好きな人間が存在するというのが、私には不思議に思える。
```

`git add` でやり直した状態のファイルをステージしてから，`git  commit --amend` で直前のコミットをやり直すことができる．`c a` で `git  commit --amend` を行います．前回のコミットメッセージ「`作業途中だがとりあえずコミットしておく`」が表示されるが，作業は終わったので、このメッセージを「`文体を統一`」に変更してコミットする．

`unify_styles` のチェックが終わったので，ブランチを `master` に切り替え，`m e` で `unify_styles` をマージする．`m k` で `unify_styles` を削除する．

### 09_clone.md
ここから，複数人での操作です．`スタートメニュー` → `Git` → `Git Bash` で作業します．たかしくんの設定をします．

```bash
$ mkdir ~/Documents/takashi_workspace
$ git init
$ git config user.name TAKASHI
$ git config user.email takashi@example.com
```
`Emacs` で `C-x g(magit-status)` でリポジトリを `takashi_workspace` を指定する．取り敢えず何かコミットしたいので，`cat_lover_said.txt` をコミットメッセージ「`猫好きの話を追加`」でコミットします．

```txt:cat_lover_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。

猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われており、猫ってほんとうにかわいいですね。

もうほんとうに可愛い、猫。
猫。
猫が本当にかわいい。

猫好きじゃない人間とか頭がおかしいとしか思えない。
```

`l L` でログを確認して，`Takashi` がコミットしたのを確認する．開発用のブランチを作るので，`b n` から `development` ブランチを作成する．

ここでは，みんなが作業するリポジトリを作成するので，`:` で `Git` のサブコマンドが入力できるので，

```
clone --bare ~/Documents/takashi_workspace ~/Documents/shared_repo.git
```

と入力する．

ゆうすけが作業にさんかすることになったので，`ベアリポジトリ` から複製する．`Git bash` から作業します．

```bash
$ git clone ~/Documents/shared_repo.git ~/Documents/yuusuke_workspace
$ cd ~/Documents/yuusuke_workspace
$ git config user.name YUUSUKE
$ git config user.email yuusuke@example.com
```

ゆうすけのリポジトリを `Emacs` で開きたいので，一度 `*scratch*` バッファなどに切り替えて， `C-x g(magit-status)` でリポジトリを `yuusuke_workspace` を指定する．`origin/development` を追跡する `development` ブランチを作成する．`b n` で `Create and checkout branch starting at:` に `origin/development` を選択して，`Branch name:` を `development` にする．

たかしのリポジトリは，`clone` してないので，リモートリポジトリを登録してない状態なので，`M a` で `Remote name:` を `origin`，`Remote url:` を `path/to/shared_repo.git` を指定する．`b u` で追跡するブランチを追加する．ブランチを `development` に切り替え，こちらでも，`b u` で追加する．

### 10_push_pull.md
ゆうすけでの作業．`magit-status` が `yuusuke_workspace` になっているのを確認する．`development` ブランチから文体統一の `feature/unify_styles` を切ってチェックアウトするので，`b c` で `Create and checkout branch starting at:` に `development`，`branch name:` に `feature/unify_styles` とする．

`cat_lover_said.txt` を編集して，コミットメッセージ「`文体を統一`」でコミットする．

```txt:cat_lover_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。

猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われている。

猫というのはかように本当にかわいいものである。

猫好きではない人間は、頭がおかしいのではないだろうか。
```

たかしでの作業．`magit-status` が `takashi_workspace` になっているのを確認する．`master` ブランチから `hotfix` を切ってチェックアウトする．

`cat_lover_said.txt` を編集して，コミットメッセージ「`頭おかしいという表現はまずいので修正`」でコミットする．

```txt:cat_lover_said.txt
猫は動物の一種である。

犬とならび、ペットとして飼われることの多い動物である。

猫は人間のことを下僕かなにかだと思っており、また人間も
人間で猫に使役されることを至上の喜びと思う傾向にある。

猫の魅力に取り付かれた人間は二度と猫の魅力から離れることが
できないとも言われており、猫ってほんとうにかわいいですね。

もうほんとうに可愛い、猫。
猫。
猫が本当にかわいい。

猫好きじゃない人間がいるのが不思議
```

リモートブランチ `origin/hotfix` が存在しないので，`Push` するときに `hotfix` から複製する．`P u` で `Change upstream of hotfix to:` に `origin/hotfix` を指定する．

ブランチを `master` に変更して．`m e` でマージするには，`m m` でマージするブランチ聞かれるので，`hotfix` にする．

`Unmerged info origin/master(2)` と表示され，`origin/master` の更新がされてないので，`P p` で `Push` する．

不要な `hotfix` ブランチを `b k` で削除する．リモートブランチも同様に，`b k` で `origin/hotfix` で削除できる．

`hotfix` で対応した内容が反映されている `master` を `development` に取り込む．ブランチを `development` に変更して `master` をマージする．コミットメッセージは「`緊急対応で行った修正をmaster から取り込む`」にする．リモートに反映させるのに `Push` する．たかしの作業が終わったのでゆうすけの作業に戻ります．

ゆうすけでの作業．`magit-status` が `yuusuke_workspace` に変更する．`l b` で今の状態を確認する．共有リポジトリにはまだ `feature/unify_styles` ないので `Push` する．`P u` で `Change upstream of hotfix to:` に `origin/feature/unify_styles` を指定する．

`unify_styles` の変更を `development` に取り込みたいが，すでにリモートで更新されている場合があるので，リモートの変更を取り込む必要がある．`f a(git remote update)` でリモートの変更を手元にコピーする．このままでは，`origin/master`,`origin/master` にしか変更が適応されてないので、ローカルの `master`,`development` に merge(`m m`) して変更を取り込む．`l L` で状態を確認する．

`feature/unify_styles` の変更を `development` に適応するので，`development` ブランチに切り替えマージする．コンフリクトを起こすので修正してコミットする．

```txt:cat_lover_said.txt
(最終行)
猫好きではない人間が存在するのが、私には不思議に思える。
```

コミットメッセージは，「`コンフリクトの修正<改行><改行>文体を修正するための修正と、"頭おかしい" の修正で同じ行を修正していたので、どちらの修正も生かすような対応を行った`」にする．`push` してリモートレポジトリに反映する．

## <i class="fa fa-leaf fa-fw"></i> おわりに
殴り書きで，文体の統一性がなくおかしいですが，なんとなく `Magit` の操作がつかめると思います．[Git をはじめからていねいに](https://github.com/Shinpeim/introduction-to-git) があったので操作の比較ができました．