我一直在尝试在测试存储库中的不同条件下进行一些重新基准和合并,正是因为这个原因,我达到了顶峰。
这是我对合并冲突的理解,它们基本上是在功能分支有更改时产生的,这些更改与主的更改不同,而提交时它们是分开的。
这是我正在测试的存储库的分支结构。
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是否有
- 假设C添加了一行既不在a中也不由D添加的行,那么它将在最终提交中
- 唯一必须发生冲突的情况是,当其中一个分支添加或删除一行,而另一个分支对同一行进行修改时,and同一行也应出现在其最后一个共同祖先(即a(中
但我的存储库并非如此,那么为什么会出现冲突。如果我对合并冲突的理解是错误的,请纠正我。
发生内容冲突的规则非常简单:git看到两个branhe在不同的方向修改了同一段代码。可以添加/添加、添加/修改、添加/删除、修改/修改、修改/删除或删除/删除。
在您的特定情况下,会发生冲突,因为构成冲突部分内容的所有行都被修改了。从A到D,修改后的行后面有行2。但在另一个分支上,那行已经不见了,所以git不会猜测你可能想要得到的合并结果,所以它发生了冲突。如果通过两个分支的这两条线之间有固定的间隔(类似于----
(,就不会有冲突。