Git报告了合并冲突,但功能块是相同的

问题描述

我正在尝试通过一个在线项目来学习逃亡者,尤其是解决合并冲突,因为我发现手动完成这项工作非常繁琐。我不知道这是否是一个有效的问题,因为我无法在正在使用的回购协议之外重现效果,否则我从未见过。

无论如何,Git正在报告合并冲突。但是,当我去编辑包含冲突的文件时,我滚动到Git添加的用于标记冲突的注释(顺便说一下,这些被称为什么?),它们是相同的。像这样:

<<<<<<< HEAD
These are identical
=======
These are identical
>>>>>>> merge-branch

它们是完全相同的。一个或另一个之间没有异常的空格,看上去也不奇怪的奇怪的Unicode字符,等等。逐字节相同。因此,Fugitive / vimdiff不起作用:它检测到的唯一区别是那些带内注释,因此执行:diffget:diffpull只会删除注释。由于注释被适当地分开,因此将它们分开处理,因此必须分别处理每个注释,最终您将得到以下明显不正确的结果:

These are identical
These are identical

起初,我认为注释是偶然地提交到其中一个分支中的-这是我唯一能想到的解释-但没有,它们无处可寻。每个分支中的文件并不完全相同,但是它们之间没有冲突。

很明显,Git(2.28.0)错误标记了冲突,并且Vim / Fugitive正常工作。怎么了?

解决方法

您的描述确实很奇怪,我认为引发冲突的要素缺少一些解释。

我建议检查“ diff左”和“ diff右”,以进一步寻找可能造成这种冲突的原因。

在文件git show :1:foo上引发冲突时,git实际上会保留3个对该文件副本的引用:

  • “基于合并”提交中的文件:git show :2:foo
  • “我们的”提交中的文件:git show :3:foo
  • “他们的”提交中的文件:git diff :1:foo :2:foo

检查git diff :1:foo :3:foocol-6,看看是否发现可能引发冲突的事物。