我创建了一个 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
。我还需要做什么?
冲突消息:
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 mergetool
,它会提示我是否要保留修改后的文件或将其删除。恕我直言,这是最快的方法,因为它是一个命令,而不是每个文件多个命令。
如果您在特定子目录中有一堆已删除的文件,并且您希望通过删除文件来解决所有这些文件,您可以这样做:
yes d | git mergetool -- the/subdirectory
提供 d
以选择删除每个文件。您也可以使用 m
来保留修改后的文件。取自您在运行 mergetool
时看到的提示:
Use (m)odified or (d)eleted file, or (a)bort?
This message is displayed because 'merge.tool' is not configured.
添加 -t emerge
参数(后来,运行 git config --global merge.tool emerge
)为我解决了这个问题
如果您在 Windows 上使用 Git Gui,
中止合并 确保您在目标分支上 从资源管理器中删除冲突文件 重新扫描 Git Gui (F5) 中的更改 注意冲突文件已删除 从 Commit 菜单中选择 Stage Changed Files To Commit (Ctrl-I) 输入提交注释像“已删除的冲突文件” 提交 (ctrl-enter) 现在,如果您重新启动合并,它将(希望)工作。
git rm …
),但我得到了…: needs merge
和rm '…'
,我很难解释。然后,如果我尝试提交,stackoverflow.com/questions/19985906/… 会再次出现。git ls-files --stage
和/或git status --porcelain
和/或git diff-files <something>
获取已更改文件的列表并驱动脚本删除它们或接受您或他们的版本。git status
或git diff --cc
检查它。还有git log --merge
可能会有所帮助...