【Git】削除ファイルの競合を解消する

  • 2020-05-22
  • 2023-08-27
  • Git
Git

削除ファイルの競合とは

別ブランチを取り込んだ時や、stashした内容を元に戻すときなど、マージするタイミングで競合が発生することがあります。
競合は同一ファイルで起こることがほとんどですが、まれに削除ファイルが競合することがあり、解除コマンドを知らないとなかなか厄介な状況に陥ります。

どういう時に発生するか

例えばHEADdevelopブランチをマージした後、以下のようなログが出力された時。

CONFLICT (modify/delete): test.java deleted in HEAD and modified in develop. Version develop of test.java left in tree.
Automatic merge failed; fix conflicts and then commit the result.

HEADのtest.javaは削除しているが、developブランチのtest.javaは編集されているので、自動マージに失敗しました。といった意味になります。

解消するには

どちらのtest.javaを優先するかで対処が分かれます。
要は競合したファイルに対して「削除するか」「編集したファイルを受け入れるか」の二択です。

ファイルを削除する場合

上記例ではHEADを優先する選択肢。

// test.javaを削除
$ git rm test.java

// コミット
$ git commit

編集したファイルを受け入れる場合

上記例ではdevelopを優先する選択肢。

// test.javaをaddする
$ git add test.java

// コミット
$ git commit