web-dev-qa-db-ja.com

ブランチ内のファイルの削除によるマージの競合を修正するにはどうすればよいですか?

dialogブランチを作成し、それをmasterブランチにマージしようとしています。 2つの競合があります。 CONFLICT (delete/modify)を解決する方法がわかりません。何をすべきか教えてください。

$ git checkout master
$ git merge dialog
CONFLICT (delete/modify): res/layout/dialog_item.xml deleted in dialog and modified in HEAD. Version HEAD of res/layout/dialog_item.xml left in tree.
Auto-merging src/com/DialogAdapter.Java
CONFLICT (content): Merge conflict in src/DialogAdapter.Java
Automatic merge failed; fix conflicts and then commit the result.

src/DialogAdapter.Javaを開き、競合を修正し、git add src/DialogAdapter.Javaを実行しました。他に何をする必要がありますか?

174
n179911

競合メッセージ:

 CONFLICT(削除/変更):res/layout/dialog_item.xmlはダイアログで削除され、HEADで変更されました

は、res/layout/dialog_item.xmlがマージしている 'dialog'ブランチで削除されたが、HEAD(マージ先のブランチ)で変更されたことを意味します。

だから、あなたは決定する必要があります

  • git rm res/layout/dialog_item.xml」を使用してファイルを削除します

または

  • git add res/layout/dialog_item.xml」でHEADから(おそらく編集後に)バージョンを受け入れます

次に、「git commit」でマージを終了します。

Gitはマージコミットを作成していることを警告することに注意してください。(まれに)不要な場合です。おそらく、そのケースがそれほど珍しくなかった時代から残っています。

224
Jakub Narębski

通常、git mergetoolを実行するだけで、変更したファイルを保持するか、削除したままにするかを確認するメッセージが表示されます。これは、ファイルごとに複数のコマンドを実行するのではなく、1つのコマンドであるため、最も高速な方法です。

特定のサブディレクトリに多数の削除されたファイルがあり、それらをすべてファイルを削除することで解決したい場合、これを行うことができます。

yes d | git mergetool -- the/subdirectory

dは、各ファイルの削除を選択するために提供されています。 mを使用して、変更されたファイルを保持することもできます。 mergetoolの実行時に表示されるプロンプトから取得:

Use (m)odified or (d)eleted file, or (a)bort?
58
void.pointer

WindowsでGit Guiを使用している場合、

  1. マージを中止します
  2. ターゲットブランチにいることを確認してください
  3. 競合するファイルをエクスプローラーから削除します
  4. Git Gui(F5)の変更を再スキャンします
  5. 競合するファイルが削除されることに注意してください
  6. [コミット]メニューから[ステージに変更されたファイルをコミット](Ctrl-I)を選択します。
  7. 「削除された競合ファイル」などのコミットコメントを入力します
  8. コミット(ctrl-enter)
  9. マージを再開すると、(うまくいけば)動作するようになりました。
4
salihcenap