ChatGPT解决这个技术问题 Extra ChatGPT

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

我创建了一个 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 上阅读这篇文章:- How Do I Fix Merge Conflicts in Git? 接受的答案引用了 git manual

J
Jakub Narębski

冲突消息:

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”删除文件

或者

使用“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 可能会有所帮助...
v
void.pointer

我通常只运行 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)为我解决了这个问题
s
salihcenap

如果您在 Windows 上使用 Git Gui,

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