Edited at

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


コンフリクトとは

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

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

この際に自動的にコードが統合されます. この際に自動で統合できないことをコンフリクトといいます.

コンフリクトが起きた場合は, ローカルで解消する必要があります.


git_frow.png

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

fd64b010-c06b-11e6-9dd3-a827e299c5bf.gif


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

コンフリクトの際に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ポケットリファレンス(書籍)