チュートリアル1 ブランチを使ってみよう!

6. マージでの衝突を解決する

それでは、issue2ブランチでの変更と、issue3ブランチでの変更をmasterに統合しましょう。

まずは、masterブランチをチェックアウトした後、issue2ブランチをマージします。

$ git checkout master
Switched to branch 'master'
$ git merge issue2
Updating b2b23c4..8f7aa27
Fast-forward
 myfile.txt |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

これは、fast-forward(早送り)マージが行われます。

現時点での履歴

次に、issue3ブランチをマージします。

$ git merge issue3
Auto-merging myfile.txt
CONFLICT (content): Merge conflict in myfile.txt
Automatic merge failed; fix conflicts and then commit the result.

自動マージに失敗してしまいました。同じ行を別の内容に変更していたため競合が発生したようです。この時のmyfile.txtの内容は以下のようになっていると思います。

サルでもわかるGitコマンド
add 変更をインデックスに登録する
<<<<<<< HEAD
commit インデックスの状態を記録する
=======
pull リモートリポジトリの内容を取得する
>>>>>>> issue3

修正しよう

競合のあった箇所には、Gitが差分を挿入しています。
これを以下のように修正します。

サルでもわかるGitコマンド
add 変更をインデックスに登録する
commit インデックスの状態を記録する
pull リモートリポジトリの内容を取得する

競合箇所を修正したので、改めてコミットします。

$ git add myfile.txt
$ git commit -m "issue3ブランチをマージ"
# On branch master
nothing to commit (working directory clean)

履歴はこのようになります。今回のマージでは競合箇所を修正したため、その変更を記録するマージコミットが新たに作成されました。そして、masterの先頭はそこに移動しています。このようなマージはfast-forwardではないマージ、ということでnon fast-forwardマージと呼ばれます。

現時点での履歴