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

Can*_*yar 2 git

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

我找到了这个条目,但它似乎不是同一个问题。:)

ang*_*son 6

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

你有这个:

  master
    v
*---*
     \
      \
       *---*---*---*---*---*---*
                   ^           ^
                   X           Y
Run Code Online (Sandbox Code Playgroud)

然后将 X 合并到 master 中:

                    master
                      v
*---*-----------------*
     \               /
      \             /
       *---*---*---*---*---*---*
                   ^           ^
                   X           Y
Run Code Online (Sandbox Code Playgroud)

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

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

你会得到这样的结果:

                                master
                                  v
*---*-----------------*-----------*
     \               /           /
      \             /           /
       *---*---*---*---*---*---*
                   ^           ^
                   X           Y
Run Code Online (Sandbox Code Playgroud)

如果你从来没有制作过 Y,将 X 合并到 master,但继续在 X 上工作,最后又将 X 合并到 master,那么你就会出现这种情况:

                                master
                                  v
*---*-----------------*-----------*
     \               /           /
      \             /           /
       *---*---*---*---*---*---*
                               ^
                               X
Run Code Online (Sandbox Code Playgroud)

除了涉及哪些分支名称之外,这是相同的情况。


Jay*_*Jay 5

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

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

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

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

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