6
6

More than 1 year has passed since last update.

【Git】バイナリファイルがコンフリクトを起こした場合

Last updated at Posted at 2021-10-10

はじめに

チーム開発において、現在いる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の動作と対処方法

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6