【问题标题】:How to merge a parent branch while keeping the child branch intact如何在保持子分支完整的同时合并父分支
【发布时间】:2019-07-31 07:03:48
【问题描述】:

我目前有一个 master 分支,就本问题而言,我们将其称为“分支 A”。我想开发一个基于我在分支 A 中编写的代码的新功能,但它是一个重要功能,所以我想创建一个新分支。我们将这个新分支称为“分支 B”。我现在需要开始在分支 B 上工作,但是在创建分支 B 之后但在分支 B 完成之前,分支 A 将在某个时间点合并到 master。有没有办法做到这一点,以便保留分支层次结构?这是我想要的可视化:

合并前:

_______ 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)

有没有办法做到这一点?

【问题讨论】:

    标签: git merge git-merge


    【解决方案1】:

    是的,很容易做到,因为这里是合并的原理。


    怎么办?

    只需将branchA 合并到masterbranchB 将不在此合并范围内。

    git checkout master
    git merge branchA
    

    为什么?

    Git 将搜索这两者之间的合并基础(他们共享的最新提交),然后应用到接收端(此处为 master)每个提交端(此处为 branchA)中存在的 @987654327 @没有。

    让我们想象一个更详细的例子:

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

    当你从master 分支执行git merge branchA 时,git 将确定这两个分支之间的合并基础是C2。然后它将检测C5C6C7C8 作为master 中不存在但存在于branchA 中的提交。 C9C10 没有理由被包括在内,因为从 branchA 无法访问它们。


    事后情况

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

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

    您将能够继续处理branchB,然后在将来某个时候将其合并到master(或者不合并)。

    * (有些人更喜欢这个比喻来概念化分支,但从技术上讲,它只是意味着所有这些提交都可以从分支尖端通过父关系访问)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 2013-05-02
      相关资源
      最近更新 更多