我认为问题很清楚,但是为了进一步说明,请考虑您有一个名为X的分支,并从X创建了一个新的分支Y。如果我将分支X合并到主分支中,分支Y会发生什么?如果没有其他人对主分支进行任何更改,我能否将分支Y合并到主分支中而不会出现冲突?
我找到了这篇文章,但似乎不是同样的问题。 :)
我认为问题很清楚,但是为了进一步说明,请考虑您有一个名为X的分支,并从X创建了一个新的分支Y。如果我将分支X合并到主分支中,分支Y会发生什么?如果没有其他人对主分支进行任何更改,我能否将分支Y合并到主分支中而不会出现冲突?
我找到了这篇文章,但似乎不是同样的问题。 :)
让我们更清楚地了解情况。
你有这个:
master
v
*---*
\
\
*---*---*---*---*---*---*
^ ^
X Y
然后您将X合并到主分支(master):
master
v
*---*-----------------*
\ /
\ /
*---*---*---*---*---*---*
^ ^
X Y
现在您想将Y合并到主分支。
这完全没有问题,假设像您所说的那样,在主分支上没有进行其他更改,就不会出现任何其他冲突。
您最终将得到以下结果:
master
v
*---*-----------------*-----------*
\ / /
\ / /
*---*---*---*---*---*---*
^ ^
X Y
master
v
*---*-----------------*-----------*
\ / /
\ / /
*---*---*---*---*---*---*
^
X
除了分支名称不同外,情况是相同的。
子分支不会受到其父分支合并的影响。分支基本上只是人类用户的一个概念,git只会看到提交。
如果您决定在其父分支后的某个时间点将子分支合并到主干中,则git将找到已经合并的X的顶部提交作为Y和主干的共同祖先。
因此,git将仅应用在X和Y之间提交的更改 - 因为在那之前的所有提交都已经在主干上。
此外:如果您在将X合并到主干时解决了冲突,则将不会在将Y合并到主干时再次出现相同的冲突,因为已经解决了冲突。
但是:如果您在仅在Y上进行的提交中更改了以前存在冲突的行,并且在主干上的同一行看起来与X上的不同,那么可能会在同一行上出现一些新的冲突。