为什么git将两个单独的删除行标记为冲突?

时间:2017-07-05 08:44:22

标签: git merge-conflict-resolution

我有一个包含此内容的文件:

line 1
line 2
line 3
line 4

在分支A上提交。

由此,我创建了一个分支B并删除了提交中的第三行。 我结帐分支A并删除另一个提交中的第二行。

当我在分支B中合并分支A时,我在该文件中遇到如下冲突:

line 1
<<<<<<< HEAD
line 2
=======
line 3
>>>>>>> B
line 4

1)如果修改了相同的行,为什么会出现冲突? 2)为什么它显示为那样而不是:

line 1
<<<<<<< HEAD
=======
>>>>>>> B
line 4

更清楚地表明这些行被删除了吗?

1 个答案:

答案 0 :(得分:2)

为了确保它不会破坏任何东西,任何体面的差异程序也会跟踪至少两行上下文:一个在上面,一个在添加/修改/删除的行下面。

当您删除分支B上的第3行时,实际上是修改了第2-4行的块。类似地,在分支A上修改1-3行的块。

这两个块重叠,它们引入了不同的变化。 Git无法确定如何合并这些更改,这就是为什么它将它们标记为冲突。

分支B上的文件内容是:

line 1
line 2
line 4

但在当前分支(分支A)上是:

line 1
line 3
line 4

哪一个是&#34;正确&#34;版?合并后你期望得到什么? Git说不清楚。 说不出来。只有你可以告诉。

如何阅读Git报告的冲突区域:

line 1
<<<<<<< HEAD
line 2
=======
line 3
>>>>>>> B
line 4

在简单的英语中,上面的块显示:&#34; line 1line 4之间,当前分支上有line 2但分支B上有line 3&# 34。

你建议的阻止:

line 1
<<<<<<< HEAD
=======
>>>>>>> B
line 4

表示:在两个分支上,line 1line 4之间没有任何内容。这不是真的。

你永远不会在差异中遇到这样的障碍。它基本上意味着文件的比较版本之间没有冲突。