Git 为什么在双向合并中合并基础很重要?

Git 为什么在双向合并中合并基础很重要?,git,Git,我试图理解为什么合并基在复杂的三方合并中很重要。为了理解这一点,我意识到我甚至不明白为什么它们在双向合并中很重要 例如:假设分支“master”上有commitB,分支“alt”上有commitC。进一步假设B和C分别是每个分支master和alt的头提交。假设我们希望将C合并到B中,在主分支上形成commitD。最后,假设“master”分支上的commitA是B和C的合并基础 问题1:为什么执行合并操作时A很重要?git难道不能将C的工作目录的内容合并到B的工作目录中,而不引用A的工作目录的

我试图理解为什么合并基在复杂的三方合并中很重要。为了理解这一点,我意识到我甚至不明白为什么它们在双向合并中很重要

例如:假设分支“master”上有commit
B
,分支“alt”上有commit
C
。进一步假设
B
C
分别是每个分支
master
alt
的头提交。假设我们希望将
C
合并到
B
中,在主分支上形成commit
D
。最后,假设“master”分支上的commit
A
B
C
的合并基础

问题1:为什么执行合并操作时
A
很重要?git难道不能将
C
的工作目录的内容合并到
B
的工作目录中,而不引用
A
的工作目录的内容吗

编辑:

问题2:假设在
C
A
之间有提交和/或在
B
A
之间有提交。从git的角度来看,在执行合并操作时,这些提交是否重要?

您所描述的是一种三向合并:
B
C
将与它们的共同祖先
a
的知识合并。公共祖先用于知道在
A
B
之间修改了哪些文件,因此需要将哪些更改带到
C
(以及在
A
C
之间进行了哪些更改,以标记冲突)


想象一下,您没有使用合并库:现在,您所拥有的只是两侧的一堆文件。如果有不同的文件,它们必须冲突。如果您有一个共同的祖先,您可以确定某个分支如何更改了文件并提升了一个方面(如果
B
更改了一个文件,但
C
未更改,则合并时将采用
B
方面)。如果没有一个共同的祖先,那只能是一种冲突。

因此,理论上,合并不需要合并基
a
,除非它使合并更改的使用更容易(即,如果没有
a
,用户必须授权
B
C
之间的每个文件差异)?这就是你的意思吗?是的,非常准确。