Git冲突"both deleted"

30
我不明白为什么“both deleted”被标记为未合并路径的状态。
如果:
OldStandard是基础版本, NewStandard是主干上最后的提交, OldCustom是我们尝试合并回主分支的分支(从OldStandard fork出来)。
为什么会有一些文件标记为“both deleted”存在冲突?
我理解“both added”的冲突,当一个文件在NewStandard中添加,而另一个版本的文件在OldCustom中添加时。
但是,对于删除操作,如果文件已经在NewStandard中被删除,并且在OldCustom中也被删除了,那么问题出在哪里呢?这是等价的状态,不是吗?

3
Git需要将一个提交哈希与删除关联起来。在这里,哪个提交应该拥有这个删除操作? - Tom
可能是复制Git合并冲突:DD的重复问题。 - LeGEC
1个回答

22

正如这个答案所述(建议作为重复问题):

branchA有一个git mv oldfile newstandard提交,而branchB有一个git mv oldfile newcustom提交时,您会看到“both deleted”。

在这种情况下,当尝试将customBranch合并到standardBranch中时,git将报告三个文件上的冲突:

both deleted:  oldfile
added by them: newcustom
added by us:   newstandard

就像任何冲突一样,最终的选择在你手中:

git 只是强调了一个可能的问题,即 newcustomnewstandard 在你的最终代码版本中共存可能存在问题,并且也许这与它们都是从 oldfile 的副本创建而来有关。

你可以手动解决这个问题:

  • 如果删除 oldfile 是预期结果: git reset -- oldfile
  • 如果保留 newstandard 是预期结果,请删除另一个:git reset newcustom && git rm newcustom
  • 如果应该合并 newstandardnewcustom 的某些部分:手动编辑它们,或者使用三向合并工具:meld newstandard newstandard newcustom
  • 等等...

在这种情况下,我们如何决定保留哪些内容?接受删除似乎是有道理的,然后在合并最终确定时选择newcustomnewstandard之一。但是当存在数百个冲突时,我们如何清楚地看到我们必须在这两个文件之间做出选择?使用git mergetool在这里并没有帮助,我是对的吗? - user3341592
@user3341592:你说得对,只有在解决单个文件上的“both modified”冲突时,mergetool才会向您展示“正确”的三方合并。 - LeGEC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接