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


208

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。他に何をする必要がありますか?


Stack Overflowでこの投稿を読むことができます:-Gitでマージの競合を修正するにはどうすればよいですか?受け入れられた回答はgitマニュアルを参照しています
2009

回答:


271

競合メッセージ:

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

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

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

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

または

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

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

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


22
(元を試してみましたgit rm …)が、私は得る…: needs mergerm '…'私は苦労の通訳を持っていました。そして、コミットしようとすると、stackoverflow.com / questions / 19985906 / … が再び表示されます。
Jesse Glick 2014年

17
そのコメントの後半は気にしないでください。Gitからの出力は多少憂慮すべきですが、無害のようです。
Jesse Glick

4
マスアプローチはありますか?保持したくない外部のものに依存するプロジェクトが手元にあります。したがって、上流で変更されたファイルがたくさんあり、ブランチで削除したいのですが、何があってもリベースしています。1つずつ行うのは退屈です。
mlt 2013年

2
@mit:git ls-files --stageand / or git status --porcelainおよび/またはgit diff-files <something>を使用して、変更されたファイルのリストを取得し、スクリプトを実行してそれらを削除するか、自分のバージョンを受け入れることができます。
JakubNarębski、2015年

1
@ハニー:CONFLICTメッセージには、どのブランチでどの変更が行われたかについての説明が含まれています。git statusまたはで後で確認できgit diff --ccます。ありますgit log --merge...助けるかもしれない
ヤクブNarębski

74

通常は実行するだけでgit mergetool、変更したファイルを保持するか、削除したままにするかを尋ねるプロンプトが表示されます。これは、ファイルごとに複数ではなく1つのコマンドであるため、IMHOの最も速い方法です。

特定のサブディレクトリに一連の削除済みファイルがあり、ファイルを削除することでそれらすべてを解決したい場合は、次のようにします。

yes d | git mergetool -- the/subdirectory

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

Use (m)odified or (d)eleted file, or (a)bort?

1
@BrianMinton私も、他のものは悪循環だった
Nate L

2
多くのファイルがある場合、これは面倒ですが、すべてに1つの答えを与える方法はありますか?
ideasman42

2
@ ideasman42バッチ削除ソリューションを表示するように回答を更新しました。
void.pointer

1
私はマージツールについて本当に知りませんでした。あなたは私の一日を救った!
MERT

6

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

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

5
おそらくGUIでGitを処理する方法が気に入らないだけでしょう。コマンドラインの方が優れています。
Souris
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.