削除ファイルの競合とは
別ブランチを取り込んだ時や、stashした内容を元に戻すときなど、マージするタイミングで競合が発生することがあります。
競合は同一ファイルで起こることがほとんどですが、まれに削除ファイルが競合することがあり、解除コマンドを知らないとなかなか厄介な状況に陥ります。
どういう時に発生するか
例えばHEAD
にdevelop
ブランチをマージした後、以下のようなログが出力された時。
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