2

我正在尝试通过实时项目学习 Fugitive,特别是解决合并冲突,因为我发现手动执行此操作非常乏味。我不知道这是否是一个有效的问题,因为我无法在我正在使用的 repo 之外重现效果,而且我以前从未见过它。

无论如何,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 工作正常。这里出了什么问题?

4

1 回答 1

1

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

我建议检查“左差异”和“右差异”,以进一步了解可能造成这种冲突的原因。

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

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

检查git diff :1:foo :2:foogit diff :1:foo :3:foo查看您是否发现了可能引发您看到的冲突的东西。

于 2020-08-12T14:08:37.413 回答