代码之家  ›  专栏  ›  技术社区  ›  Anastasios Selmani

将git支持分支集成到master

  •  1
  • Anastasios Selmani  · 技术社区  · 6 年前

    我的工作中有以下情况,我想不出一个办法来处理,所以我想寻求一些帮助。

    1. 我们遵循git流程来获取产品的核心特性
    2. 我们有多个版本行,它们都是从master创建的分支。我的意思是,对于每一个客户,我们都会得到一个核心产品的版本(在我们开始的时候),并将其扩展到客户的需要。
    3. 在某些时候,我们希望集成核心产品中发生的所有更改。
    4. 我们通过合并从master到每个分支的更改来实现这一点。

    我想问的是以下情况:

    1. 我们希望从以前版本的master中集成。让我们说1.3,而主人在1.5。
    2. 我们在标记的版本中发现了一个bug。

    现在我们可以在客户机分支中修复它并完成集成,然后将该修复添加到当前主节点(1.5)并结束它。

    不过,将这个补丁“注入”master的1.3版本将非常有帮助。这样,任何其他试图集成此版本的人都已经得到了修复。

    现在从我的观点来看,这类对象有一个空洞的概念,即对版本控制进行编号,但我认为它在某些情况下确实会有帮助,所以我想问是否有人以某种方式处理它,或者是否有一个git进程来处理它,这是我错过的。

    我已经看到了 Support Branches and Hotfixes 但这些树枝不能盖住我的箱子。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Marina Liu    6 年前

    根据你的情况,我建议你 合并了已修复错误的客户端分支 master 分支 (不是像1.3那样的旧版本) 并在最新的 主人 分支 是的。

    让我们说明为什么要将修补程序从客户端分支“插入”到 主人 不建议使用分支。

    假设git repo的提交历史如下。client1~4是从 主人 分支并提交 A 用于版本 1.3 ,提交 C 用于版本 1.5 主人 分支。有个窃听器 client1 分支。

              F---G client2         J---K client4
             /                     /
    …---P---A-----------------B---C  master
             \                 \
              D---E client1     H---I client3
    

    如果在commit中注入修复程序 一个 (更改历史提交 主人 然后它将导致 主人 与原件分开 主人 分支。将fix注入commit的命令 一个 再重新定位 主人 分支如下:

    git checkout -b temp <commit P>
    git merge client --squash
    git rebase --onto temp <commit A> master
    git branch -D temp
    

    那么提交历史将是(从原始主分支创建的客户机分支不在rebased上 主人 分支现在,并且现有的客户端分支实际上不包含bug固定的更改):

              F---G client2         J---K client4
             /                     /
    …---P---A-----------------B---C 
         \   \                 \
          \   D---E client1     H---I client3
           \
            A'---B'---C'  master
    

    正确的方法应该 合并 客户1 分支到 主人 分支,然后将其他现有客户端分支重新设置在 主人 分支 .具体步骤如下:

    一。将Client1分支合并到主分支

    执行以下命令以合并 客户1 进入之内 主人 分支机构:

    git checkout master
    git merge client1
    git push origin master
    

    那么提交历史将是( M 是合并提交):

              F---G client2         J---K client4
             /                     /
    …---P---A-----------------B---C---------------M  master
             \                 \                 /
              \                 H---I client3   /
               \                               /
                ----------------------D-------E client1    
    

    2.在主分支顶部重新设置其他现有客户端分支

    主人 分支,只需要执行 git pull origin master --rebase 分别在客户分行:

    # rebase client2 branch
    git checkout client2
    git pull origin master --rebase
    # rebase client3 branch
    git checkout client3
    git pull origin master --rebase
    # rebase client4 branch
    git checkout client4
    git pull origin master --rebase
    

    那么提交历史将是:

                            J'---K' client4     
                           /                         
                          F'---G' client2
                         /
    …---P---A---B---C---M  master
             \         / \      
              D-------E   H'---I' client3     
    

    现在所有现有的客户端分支都包含bug修复的更改。如果创建了新的客户机分支,它们还将包含已修复的错误的更改。

        2
  •  1
  •   VonC    6 年前

    不过,将这个补丁“注入”master的1.3版本将非常有帮助。这样,任何其他试图集成此版本的人都已经得到了修复。

    为此,您需要:

    • 创建分支 master1.3 ,从标记1.3开始 master ,在其中应用该修复程序;
    • 在新的 大师1.3 分支。

    手术建议:

    我想以某种方式调整(不完全是因为我真的不知道会发生什么)。 主人 管道。
    所以从现在起,每一个想集成1.3,1.4和1.5的其他开发人员都可以从master那里得到它。

    这意味着在1.3提交之后插入修复程序,并应用其余的(1.4,1.5):这在rebase交互中是可能的( git rebase -i ,但问题太大了,因为这将改变每个人都使用的公共分支的历史。

    因此我的“1.3热修复”分支方法。

    另一个选择当然是“将该修复添加到当前主版本(1.5)并结束它。”:我不建议修改 主人 是的。