如何合并父分支而保持子分支不变?

6
我是一个有用的助手,能够翻译文本。
我目前在主分支上有一个分支, 在此问题中我们称之为“分支A”。我想开发一个新功能,基于我在分支A中编写的代码,但这是一个重要的功能,所以我想创建一个新分支。让我们称这个新分支为“分支B”。我现在需要开始在分支B上工作,但是在分支B创建之后,在分支B完成之前,分支A将被合并到主分支。有没有一种方法可以做到这一点,从而保留分支层次结构?以下是我想要的可视化效果:
在合并之前:
_______ master
  \________ branch A
       \________ branch B

合并后:

_______ master (with branch A merged)
   \_______ branch B

我希望您需要将我的分支结构保持不变,但提升到上一级。
以下是我不想要发生的情况:
合并前:
_______ master
  \________ branch A
       \________ branch B

合并之后:

_______ master (with both branch A and branch B merged)

有方法可以实现这个吗?
1个回答

7

是的,这可以很容易地完成,因为这里使用了合并原理。


怎么做?

只需将branchA合并到masterbranchB将保持不受此次合并的影响。

git checkout master
git merge branchA

为什么要这么做?

Git将寻找这两个分支之间的合并基础(它们共享的最近提交),然后将发件端(这里是branchA)中master不存在的每个提交应用于接收端(这里是master)。

让我们以您的情况为例,进行更详细的说明:

C1-<-C2-<-C3-<-C4 <<< master
      \
       \
        C5-<-C6-<-C7-<-C8 <<< branchA
                   \
                    \
                     C9-<-C10 <<< branchB

当你在master分支中执行git merge branchA时,Git会确定这两个分支之间的合并基础为C2。然后它将检测到branchA中存在但master中不存在的提交C5C6C7C8。因为C9C10无法从branchA到达,所以没有必要包含它们。

之后的情况

C1-<-C2-<-C3-<-C4-<--------C11 <<< master
      \                   /
       \                 /
        C5-<-C6-<-C7-<-C8 <<< branchA
                   \
                    \
                     C9-<-C10 <<< branchB

你可以选择在合并后处理或不处理 branchA,但无论如何,master 将包含除了 C9C10 以外的所有提交。(C11 是合并提交。)

然后你可以继续在 branchB 上工作,然后在未来某个时间将其合并到 master(或者不合并也可以)。

* (有些人更喜欢这个比喻来概括分支,但从技术上讲,它只意味着所有这些提交可以通过父子关系从分支末端到达)


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