【问题标题】:How do I fix a merge conflict due to removal of a file in a branch?如何解决由于删除分支中的文件而导致的合并冲突?
【发布时间】:2009-09-04 17:34:49
【问题描述】:

我创建了一个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-merge merge-conflict-resolution


【解决方案1】:

冲突消息:

冲突(删除/修改):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 会警告您正在创建合并提交,在(极少数)您不想要的情况下。可能是从上述病例不那么罕见的日子遗留下来的。

【讨论】:

  • 尝试了前者(git rm …),但我得到了…: needs mergerm '…',我很难解释。然后如果我尝试提交,stackoverflow.com/questions/19985906/… 会再次出现。
  • 别介意那条评论的后半部分。 Git 的输出有些令人担忧,但似乎是无害的。
  • 有群发方式吗?我手头有一个项目,它依赖于我不想保留的外部东西。所以有很多文件在上游被修改了,我想在我的分支中删除,无论如何我都会重新定位。一件一件做起来很繁琐。
  • @mit:您可以使用git ls-files --stage 和/或git status --porcelain 和/或git diff-files <something> 获取已更改文件的列表并驱动脚本删除它们或接受您或他们的版本。
  • @Honey:CONFLICT 消息包括关于哪个分支发生了哪些更改的描述。您可以稍后通过git statusgit diff --cc 进行检查。还有git log --merge 可能会有所帮助...
【解决方案2】:

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

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

yes d | git mergetool -- the/subdirectory

d 用于选择删除每个文件。您也可以使用m 来保留修改后的文件。取自运行mergetool时看到的提示:

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

【讨论】:

  • @BrianMinton 我也是,其他的东西只是一个恶性循环
  • 文件很多时这很烦人,有没有办法为所有人提供一个答案?
  • @ideasman42 我已经更新了我的答案以显示批量删除解决方案。
  • 我真的不知道合并工具。你救了我的一天老兄!
  • 我试过了,得到了This message is displayed because 'merge.tool' is not configured. 添加-t emerge 参数(后来,运行git config --global merge.tool emerge)为我解决了这个问题
【解决方案3】:

如果你在 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. 现在,如果您重新启动合并,它将(希望)工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2012-04-29
    • 2019-11-11
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多