如何修复由于删除分支中的文件而导致的合并冲突?

181 git git-merge merge-conflict-resolution

我创建了一个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.
Run Code Online (Sandbox Code Playgroud)

我打开了src/DialogAdapter.java,解决了冲突并做了一个git add src/DialogAdapter.java.我还需要做什么?

Jak*_*ski 234

冲突消息:

CONFLICT (delete/modify): res/layout/dialog_item.xml deleted in dialog and modified in HEAD

表示res/layout/dialog_item.xml已在合并的"对话框"分支中删除,但在HEAD中修改(在您要合并的分支中).

所以你必须决定是否

  • 使用" git rm res/layout/dialog_item.xml" 删除文件

要么

  • 从HEAD接受版本(可能在编辑之后)" git add res/layout/dialog_item.xml"

然后你用" git commit" 完成合并.

请注意,git会警告您正在创建合并提交,在(罕见)情况下,它是您不想要的.可能仍然是从所述案件不那么罕见的日子开始.

  • 试过前者(`git rm ...`),但我得到`......:需要合并`和`rm'......'`我很难解释.然后,如果我尝试提交,请再次出现http://stackoverflow.com/questions/19985906/git-merge-not-creating-merge-commit-no-merge-head. (21认同)
  • 别介意该评论的后半部分.Git的输出有点令人担忧,但似乎无害. (16认同)
  • 有一种群众方法吗?我有一个项目,依赖于我不想保留的外部东西.所以有许多文件被上游修改过,我想在我的分支中删除我无论如何都要重新调整.一个接一个地做这件事很乏味. (4认同)
  • @mit:你可以使用`git ls-files --stage`和/或`git status --porcelain`和/或`git diff-files <something>`来获取已更改文件的列表并驱动要删除的脚本他们或接受你或他们的版本. (2认同)

voi*_*ter 61

我通常只是运行git mergetool它会提示我是否要保留修改后的文件或保留它.这是恕我直言的最快方式,因为它是一个命令而不是每个文件几个.

  • 当有许多文件时,这变得很烦人,有没有办法为所有人提供一个答案? (2认同)
  • @ ideasman42我已经更新了答案,以显示批量删除解决方案。 (2认同)
  • 我尝试了这个,并得到“显示此消息是因为未配置“merge.tool”。”添加“-temerge”参数(稍后运行“git config --global merge.toolemerge”)修复了此问题为我 (2认同)

sal*_*nap 10

如果你在 Windows 上使用 Git Gui,

  1. 中止合并
  2. 确保您在目标分支上
  3. 从资源管理器中删除冲突文件
  4. 重新扫描 Git Gui (F5) 中的更改
  5. 注意冲突文件被删除
  6. 从 Commit 菜单中选择 Stage Changed Files To Commit (Ctrl-I)
  7. 输入诸如“已删除冲突文件”之类的提交注释
  8. 提交 (ctrl-enter)
  9. 现在,如果您重新启动合并,它将(希望)起作用。

  • 这家伙可能只是不喜欢他们使用 GUI 处理 Git 的方式。命令行方式更好。 (6认同)