はじめに
チーム開発において、現在いるfeatureブランチに他のメンバーが更新したdevelopブランチをマージしようとしたとき、以下のようなコンフリクトが発生した。
$ git merge develop
warning: Cannot merge binary files: .DS_Store (HEAD vs. develop)
Auto-merging .DS_Store
CONFLICT (content): Merge conflict in .DS_Store
Automatic merge failed; fix conflicts and then commit the result.
ソースコードが書いてあるファイルの場合、手動で修正し、コミットすればいいが、.DS_Store
のようなバイナリファイルの場合、コンフリクトをどのように修正するのか調べてみた。
方法
「マージされるブランチもしくはマージするブランチどちらか片方のブランチにあるファイルを全面的に採用する」というコマンドを使う。
-
マージされるブランチ(= 現在いるブランチ)にあるファイルを採用したい時
git checkout --ours 対象ファイル
-
マージするブランチにあるファイルを採用したい時
git checkout --theirs 対象ファイル
その後はいつも通りadd
してcommit
すればコンフリクトが解消される。
追記
バイナリファイル等の手動で修正することができないファイルが複数あり、ブランチ単位で指定したい場合は以下のコマンドを使う
-
マージされるブランチ(= 現在いるブランチ)を採用したい時
git merge -Xours ブランチ名
-
マージするブランチを採用したい時
git merge -Xtheirs ブランチ名
参考
[git]マージ時のコンフリクトで片側の変更だけ適用する方法
マージでバイナリファイルがコンフリクトした場合のGitの動作と対処方法