【问题标题】:What Happens To Child Branches If You Merge The Parent Branch Into Master?如果将父分支合并到主分支,子分支会发生什么?
【发布时间】:2020-11-14 05:29:46
【问题描述】:

我认为这个问题很清楚,但只是为了详细说明,假设您有一个分支 X,并且您从 X 创建了一个新的分支 Y。如果我将分支 X 合并到 master 分支 Y 会发生什么。如果没有其他人对 master 进行任何其他更改,我可以将分支 Y 合并到 master 中而没有任何冲突吗?

我找到了this entry,但这似乎不是同一个问题。 :)

【问题讨论】:

标签: git


【解决方案1】:

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

你有这个:

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

然后你将 X 合并到 master 中:

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

现在你想将 Y 合并到 master 中。

这完全没问题,并且假设如您所说,没有对 master 进行其他更改,则不会有任何其他冲突。

你最终会得到这个:

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

如果你从来没有做 Y,将 X 合并到 master,但一直在 X 上工作,最后再次将 X 合并到 master,就会出现类似的情况,那么你就会遇到这种情况:

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

除了涉及哪些分支名称之外,其他情况相同。

【讨论】:

    【解决方案2】:

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

    如果您决定在其父分支之后的某个时间点将子分支合并到 master,git 会发现 X 的已合并顶部提交是 Y 和 master 的 共同祖先

    因此 git 只会应用 X 和 Y 之间提交的更改 - 因为之前的所有提交都已经在 master 上。

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

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

    【讨论】: