[Git] コンフリクトの治し方


コンフリクトとは

gitでブランチ同士を統合する場合は, 下記のコマンドを使用します.

$git merge [マージするブランチ名]

この際に自動的にコードが統合されます. この際に自動で統合できないことをコンフリクトといいます.
コンフリクトが起きた場合は, ローカルで解消する必要があります.


http://blog.bonar.jp/entry/2014/09/04/223048
コンフリクトを起こしたファイルはLocal changeにて修正する.

手動で訂正する場合

masterブランチでsub_branchをマージする場合.

$git merge sub_branch
<body>
<<<<<<<HEAD

[ローカルブランチのコード]

=======

[マージするブランチのコード]

>>>>>>>2384792396c53837ec06b9c2a842bfccc28f3996ki
</body>

<<<<<<<>>>>>>>で囲まれた部分を手動で修正する.

GitHubでの解消機能紹介

ローカルで解決しなくてもWebで解決できる様になっています。(2016/12/13リリース)
https://github.com/blog/2293-resolve-simple-merge-conflicts-on-github

コンフリクトのメッセージについて

コンフリクトの際にstageに乗らないファイルには, 下記のようなものがある.

修正が必要(かも?)

UU(both modified)

3ウェイマージした結果のコンフリクトファイル.
=>コンフリクトしている箇所を編集する必要あり.

AA(both added)

マージされるブランチ(HEAD)にあるファイルと、マージするブランチにあるファイルをマージした結果、変更箇所がコンフリクトしているファイル
=>コンフリクトしている箇所を編集する必要あり.

UD(deleted by them)

マージされるブランチ(HEAD)に存在するファイルが、マージするブランチでは削除されているファイル
=>ファイルを削除するか, 残すか選択

DU(deleted by us)

マージするブランチに存在するファイルが、マージされるブランチ(HEAD)では削除されているファイル.
=>ファイルを削除するか, 残すか選択

修正が不要

AU(added by us)

マージされるブランチ(HEAD)にのみ存在するファイル.
=>ファイルはそのまま

UA(added by them)

マージするブランチにのみ存在するファイルです。
=>自動的にstagingに乗る.

DD(both deleted)

マージされるブランチ(HEAD)及び、マージするブランチから削除されたファイル.
=>自動で削除

参考

http://qiita.com/uasi/items/c7845f61a2f681db7ce2
http://blog.bonar.jp/entry/2014/09/04/223048
Gitポケットリファレンス(書籍)