儿童科 - 儿童科 - 硕士 - Git

时间:2017-05-10 15:38:09

标签: git github version-control merge

嗨我有一个主分支,我做了一个分支(让我们称之为分支A)。我需要在该分支上实现一个不同的功能,然后我从分支A创建了一个分支(比如分支B)。现在分支A合并为主人。如何将Branch B合并到master?

                         ------------------
                        /  BRANCH B
               ---------------------------
              /     BRANCH A
-----------------------------------------
       MASTER

现在看起来像这样:

                         ------------------
                        /  BRANCH B
               ---------------------------
              /     BRANCH A
-----------------------------------------
       MASTER + BRANCH A CHANGES

3 个答案:

答案 0 :(得分:1)

你需要合并B,就像你合并A.Git现在将如何处理已经合并过的提交。

git checkout master
git merge B

答案 1 :(得分:1)

可能你可以像任何其他合并一样进行。

我认为人们对分支机构的身份有点过于笼罩 - 或者更重要的是,人们会混淆分支机构#34; (一个可移动的ref;即一个指向某个提交的名称),带有一组提交。举个例子

x --- O --- x --- x <--(master)
       \
        A1 --- A2 --- A3 <--(branchA)
                 \
                  B1 --- B2 <--(branchB)

现在branchA是一个当前指向A3的指针。许多人认为branchA 提交的集合(A1A2A3),因此他们错误地说明了它的含义删除分支,或将其合并,或者对其进行重新定位,或以任何方式对其进行操作。

当您将branchA合并到master时,git并不关心这类事情。它只看到O是从branchAmaster可以访问的最近提交;可以从A1访问A2A3branchA,但不能从O访问x;也许可以从master但不能从O访问各种x --- O --- x --- x ----- M <--(master) \ / A1 --- A2 --- A3 <--(branchA) \ B1 --- B2 <--(branchB) 次提交。它使用该信息来计算合并(如果遇到任何困难,请求帮助),然后给你留下

branchB

现在,如果您合并A2,git可能会将branchB标识为masterB1可以访问的最新提交。 B2branchB提交可以从A2但不能从M到达;也许A3x和各种master提交可以从A2但不能从branchA到达。并且可能很好地计算得到的合并。

那说,如果它没有顺利进行,你可以通过查看A3(或branchA来简化git的事情,这可能很棘手但是如果您已删除branchB),合并master,然后签出branchA并再次合并AND [PartNumber] IN (@PartNumber1, @PartNumber2, @PartNumber3, @PartNumber4) ,仍然可行。这会将合并计算分解为两个更小/更简单的部分,并导致合并拓扑(根据您的偏好)更加对称,因此更整洁,或者更加混乱,因此更加混乱。

答案 2 :(得分:0)

有两种方法可以将B合并到master中(假设A在提交master时合并到K):

A---B---C---D--------K  master
     \              /
       E---F---G---H    Branch A
            \
             I---G      Branch B

选项1:将B重新绑定到A,然后将B合并到主

git rebase --onto A A B,然后分支结构将如下所示:

A---B---C---D--------K        master
     \              /
       E---F---G---H          Branch A
                    \
                     I'---G'  Branch B

然后将B合并为主(git merge B):

A---B---C---D-------K---------L  master
     \             /         /
      E---F---G---H         /    Branch A
                   \       /
                    I'---G'      Branch B

选项2:直接将B合并到主人(这会导致更多冲突)

git merge B

A---B---C---D--------K---L   master
     \              /   /
      E---F---G---H    /     Branch A
           \          /
            I--------G       Branch B