如果将父分支合并到主分支,子分支会发生什么?

7

我认为问题很清楚,但是为了进一步说明,请考虑您有一个名为X的分支,并从X创建了一个新的分支Y。如果我将分支X合并到主分支中,分支Y会发生什么?如果没有其他人对主分支进行任何更改,我能否将分支Y合并到主分支中而不会出现冲突?

我找到了这篇文章,但似乎不是同样的问题。 :)


1
(1) Y会发生什么 - 没有任何变化 (2) 我能将Y合并到主分支吗 - 可以,你试过了吗? - mkrieger1
更好地理解git如何存储您的数据(代码)将有助于回答您的问题。请参阅https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell。 - Adam
2个回答

12

让我们更清楚地了解情况。

你有这个:

  master
    v
*---*
     \
      \
       *---*---*---*---*---*---*
                   ^           ^
                   X           Y

然后您将X合并到主分支(master):

                    master
                      v
*---*-----------------*
     \               /
      \             /
       *---*---*---*---*---*---*
                   ^           ^
                   X           Y

现在您想将Y合并到主分支。

这完全没有问题,假设像您所说的那样,在主分支上没有进行其他更改,就不会出现任何其他冲突。

您最终将得到以下结果:

                                master
                                  v
*---*-----------------*-----------*
     \               /           /
      \             /           /
       *---*---*---*---*---*---*
                   ^           ^
                   X           Y

如果您从未创建Y,将X合并到主分支但继续在X上工作,并最终再次将X合并到主分支,则会出现类似的情况:
                                master
                                  v
*---*-----------------*-----------*
     \               /           /
      \             /           /
       *---*---*---*---*---*---*
                               ^
                               X

除了分支名称不同外,情况是相同的。


9

子分支不会受到其父分支合并的影响。分支基本上只是人类用户的一个概念,git只会看到提交。

如果您决定在其父分支后的某个时间点将子分支合并到主干中,则git将找到已经合并的X的顶部提交作为Y和主干的共同祖先

因此,git将仅应用在X和Y之间提交的更改 - 因为在那之前的所有提交都已经在主干上。

此外:如果您在将X合并到主干时解决了冲突,则将不会在将Y合并到主干时再次出现相同的冲突,因为已经解决了冲突。

但是:如果您在仅在Y上进行的提交中更改了以前存在冲突的行,并且在主干上的同一行看起来与X上的不同,那么可能会在同一行上出现一些新的冲突。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接