Git冲突“都删除”
我不明白为什么“两个删除”是未合并路径的状态。Git冲突“都删除”
如果:
- OldStandard是基础
- NewStandard是最后一次提交的树干
- OldCustom是分支(叉从OldStandard)我们尝试在主合并回
为什么与标有“同时删除”的文件有冲突?
我了解“两个添加”的冲突,当在NewStandard中添加一个文件,并在OldCustom中添加另一个版本的文件时。
但是,对于删除,如果文件已在NewStandard中删除,并且在OldCustom中也被删除,那么问题是什么?这是一个等同的状态,不是?
我找到了答案here(我建议为重复):
很明显,你可以看到一个“既删除”时branchA
有git mv oldfile newstandard
提交和branchB
有git mv oldfile newcustom
提交。
在这种情况下,当试图合并customBranch
到standardBranch
,git
将在三个文件报告冲突:
both deleted: oldfile
added by them: newcustom
added by us: newstandard
像任何冲突,最终选择驻留在你的手中:
git
只是强调了这样一个事实,即也许这可能是一个问题,因为newcustom
和newstandard
住在你的最终代码版本中,而也许这可能与这两个事实相关,因为它们都是由oldfile
的副本创建的。
你去手动修复:
- 如果去除
oldfile
是预期的结果:git reset oldfile && git rm oldfile
, - 如果保持
newstandard
是预期的结果,删除其他:git reset newcustom && git rm newcustom
, - 如果某些零件
newstandard
和newcustom
应合并:手动编辑它们,或使用3路合并工具:meld newstandard newstandard newcustom
- 等...
在这种情况下,我们该如何决定保留哪些东西?接受删除操作是合理的,然后在完成合并时选择'newcustom'或'newstandard'。但是我们怎么能清楚地看到我们必须在这两个文件之间做出选择(当有数百个冲突时)?使用'git mergetool'在这里没有帮助,对吗? – user3341592
@ user3341592:你说得对,'mergetool'只会在解决单个文件上的“两个修改”冲突时才会显示“正确”3种方式合并。 – LeGEC
Git需要将提交哈希与删除关联。哪个提交应该在这里取得删除的所有权? – Tom
[重现Git合并冲突:DD]的可能重复(https://stackoverflow.com/questions/43702944/reproducing-git-merge-conflict-dd) – LeGEC