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


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。我还需要做什么?


您可以阅读有关堆栈溢出的文章:- 如何解决Git中的合并冲突?接受的答案参考git手册
2009年

Answers:


271

冲突消息:

CONFLICT(删除/修改):res / layout / dialog_item.xml在对话框中删除并在HEAD中修改

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

所以你必须决定是否

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

要么

  • 用“ git add res/layout/dialog_item.xml” 接受HEAD的版本(也许在编辑之后)

然后,您完成与“ git commit”的合并。

请注意,在(罕见)情况下,git会警告您您正在创建合并提交,这是您不需要的。可能从所述案件少见的那一天起仍然存在。


21
试过前(git rm …),但我得到…: needs mergerm '…'这我有一个很难解释。然后,如果我尝试提交,stackoverflow.com/questions/ 19985906/…再次出现。
Jesse Glick 2014年

17
没关系该评论的后半部分。Git的输出有些令人震惊,但似乎无害。
Jesse Glick 2014年

4
有大规模的方法吗?我手头有一个项目依赖于我不想保留的外部内容。因此,有很多文件在上游进行了修改,无论如何,我都希望在分支中删除要重新部署的文件。一件一件地做是乏味的。
mlt

2
@mit:您可以使用git ls-files --stage和/或git status --porcelain和/或git diff-files <something>获取已更改文件的列表,并驱动脚本删除它们或接受您的版本。
JakubNarębski2015年

1
@Honey:CONFLICT消息包含有关哪个更改在哪个分支上的描述。您可以稍后使用git status或进行检查git diff --cc。还有git log --merge可能对您有帮助...
JakubNarębski17年

74

我通常只是运行git mergetool,如果要保留修改的文件还是将其删除,它将提示我。这是恕我直言的最快方法,因为它是一个命令,而不是每个文件几个。

如果在特定的子目录中有一堆已删除的文件,并且希望通过删除文件来解决所有这些问题,则可以执行以下操作:

yes d | git mergetool -- the/subdirectory

d提供给选择删除每个文件。您还可以m用来保留修改后的文件。摘自运行时看到的提示mergetool

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

1
@BrianMinton我也是,其他东西只是一个恶性循环
Nate L

2
当有许多文件时,这变得很烦人,有没有办法为所有人提供一个答案?
ideaman42

2
@ ideasman42我已经更新了答案,以显示批量删除解决方案。
void.pointer,

1
我真的不了解合并工具。你救了我的老兄!
Mert

6

如果您在Windows上使用Git Gui,

  1. 中止合并
  2. 确保您在目标分支上
  3. 从资源管理器中删除有冲突的文件
  4. 重新扫描Git Gui(F5)中的更改
  5. 请注意,冲突文件已删除
  6. 从“提交”菜单中选择要提交的阶段更改文件(Ctrl-I)
  7. 输入提交注释,例如“已删除冲突文件”
  8. 提交(Ctrl输入)
  9. 现在,如果您重新启动合并,它将(希望)正常工作。

5
这个家伙只是不喜欢他们用GUI处理Git的方式。命令行方式更好。
苏里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.