问题描述
我正在尝试通过一个在线项目来学习逃亡者,尤其是解决合并冲突,因为我发现手动完成这项工作非常繁琐。我不知道这是否是一个有效的问题,因为我无法在正在使用的回购协议之外重现效果,否则我从未见过。
无论如何,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:foo
和col-6
,看看是否发现可能引发冲突的事物。