【git】コンフリクトした時に一方を優先して一方を破棄する場合

master ブランチの更新を自分の開発ブランチにマージしようとしたら同じファイルが変更されていてコンフリクトしてしまった、なんてことはよくあると思います。

仕方なく手動でマージしようとしたけど、「コンフリクトが複雑で、こんなの無理!」なんて事態になりがちです。

無理にやろうとすると master 側の変更誤って書き換えてしまう恐れもあるので、そういう時は潔く自分の変更を破棄して master の変更を取り込むことをお勧めします

何度か経験しているんですが、いつもコマンドを忘れるので記事に残そうと思います。

【git】コンフリクトした時に一方を優先して一方を破棄する場合

MyViewController.swift というファイルが master ブランチと feature ブランチでコンフリクトしてしまったと仮定します。

例えば下記のような感じです。

$ git branch
  master
* feature

$ git merge master
CONFLICT (content): Merge conflict in file1
Auto-merging MyViewController.swift
CONFLICT (content): Merge conflict in MyViewController.swift

master の変更を優先する場合

git checkout コマンドに –theirs オプションを付けて master の変更を強制的に取り込みます。

$ git checkout --theirs MyViewController.swift

$ git add MyViewController.swift
$ git commit -m "masterを優先してコンフリクト解消"

自分(feature ブランチ)の変更は破棄されてしまいますので、実行前に自分の変更は必ずバックアップしておき、 master の取り込み後に再度変更を加えて master にマージすると良いでしょう。

feature の変更を優先する場合

あまり無いと思いますが、逆に自分(feature ブランチ)の変更を優先して取り込む場合は、同じく git checkout コマンドに –ours オプションを付けて実行します。

$ git checkout --ours MyViewController.swift

$ git add MyViewController.swift
$ git commit -m "featureを優先してコンフリクト解消"

以上、コンフリクトした時に手動マージできない場合の最終手段でした。

そもそもですが、コンフリクトしないことが一番なので、複数人が触りそうなファイルを更新するときは密にコミュニケーションを取って予めコンフリクトしないように対策しておきましょう。

【おすすめの関連記事】