即使没有任何冲突,Git合并也会显示冲突

时间:2020-04-14 10:53:37

标签: git merge

我一直试图在一些原因导致的测试存储库中以不同的条件进行一些基础和合并。

这是我对合并冲突的理解,它们基本上是在要素分支的更改 master 的更改(与它们分开的提交)不同时出现的。 / p>

这是我正在测试的存储库的分支结构。

     C (feature)
    /
   B
  /
 A-----D (master)

每个版本的内容只是一个名为file的文件

A:

line 1
line 2
line 3
line 4

D:

changed line 1
line 2
line 3
line 4

B:

line 1
changed line 2
line 3
line 4

C:

line 1
changed line 2
changed line 3
line 4

现在,当我执行git merge master feature时,显示与文件以下内容的合并冲突,

<<<<<<< HEAD
line 1
changed line 2
changed line 3
||||||| 00f97ec
line 1
line 2
line 3
=======
changed line 1
line 2
line 3
>>>>>>> master
line 4

这是我对git如何合并文件的理解:

  • 它将比较3个提交,即A,D和C。
  • 它将检查C或D是否添加或删除了任何行,以及A是否具有。
  • Say C添加了既不在A中也不由D添加的行,那么它将在最后一次提交中。
  • 唯一发生冲突的情况是,当一个分支添加或删除一行,而另一个分支对同一行进行修改时,并且祖先,即A。

但是我的存储库不是这种情况,那么为什么会发生冲突。如果我对合并冲突的理解有误,请纠正我。

1 个答案:

答案 0 :(得分:1)

发生内容冲突的规则非常简单:git看到两个分支以不同的方向修改了同一段代码。可以添加/添加,添加/修改,添加/删除,修改/修改,修改/删除或删除/删除。

在您的特定情况下,您会发生冲突,因为构成冲突部分内容的所有行均已修改。从A到D,修改后的行后有第2行。但是在另一分支上,该行已消失,因此git不会对由于合并而想要获取的内容进行任何猜测,因此会发生冲突。如果这两行之间有固定的间隔,使其通过两个分支(类似于----),就不会有冲突。