将Git支持分支集成到master

将Git支持分支集成到master,git,azure-devops,Git,Azure Devops,我在工作中遇到以下情况,我想不出处理的办法,所以我想寻求一些帮助 我们正在遵循git流程,了解产品的核心功能 我们有多个版本行,它们都是从master创建的分支。我的意思是,对于每个客户,我们都会得到一个核心产品的版本(在我们开始的时候),并将其扩展到客户的需要 在某些情况下,我们希望集成核心产品中发生的所有更改 我们通过合并从master到每个分支的更改来实现这一点 我想问的是以下情况: 我们希望从以前版本的master中集成。让我们假设1.3,而大师在1.5 我们在那个带标签的版本中发现了一

我在工作中遇到以下情况,我想不出处理的办法,所以我想寻求一些帮助

  • 我们正在遵循git流程,了解产品的核心功能
  • 我们有多个版本行,它们都是从master创建的分支。我的意思是,对于每个客户,我们都会得到一个核心产品的版本(在我们开始的时候),并将其扩展到客户的需要
  • 在某些情况下,我们希望集成核心产品中发生的所有更改
  • 我们通过合并从master到每个分支的更改来实现这一点
  • 我想问的是以下情况:

  • 我们希望从以前版本的master中集成。让我们假设1.3,而大师在1.5
  • 我们在那个带标签的版本中发现了一个bug 现在,我们可以在客户机分支中修复它并完成集成,然后将该修复添加到当前主服务器(1.5)中并结束

    不过,将此修复程序“注入”到1.3版本的主程序中会非常有帮助。这样,任何试图集成此版本的其他人都已经有了修复程序

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

    我已经看到Git的流程了,但是这些分支没有涵盖我的情况

    不过,将此修复程序“注入”到1.3版本的主程序中会非常有帮助。这样,任何试图集成此版本的其他人都已经有了修复程序

    为此,您需要:

    • 创建一个分支
      master1.3
      ,从
      master
      上完成的标记1.3开始,在其中应用该修复
    • 在新的
      master1.3
      分支上重新设置1.3版本分支的基础(每个客户端一个)
    OP建议:


    我想以某种方式重新设置
    主管道的基础(不完全是重新设置基础,因为我真的不知道会发生什么事)。
    因此,从现在起,所有其他想要集成1.3、1.4和后续版本的开发人员,直到1.5版本,都可以从master获得它

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

    因此,我采用了“1.3热修复”分支方法


    另一个选项当然是“将该修复添加到当前主机(1.5)并结束它。”:我不建议弄乱
    master

    的提交历史。对于您的情况,我建议您合并将错误修复到
    master
    分支的客户端分支(而不是像1.3一样的旧版本)并在最新的
    主分支
    分支
    顶部重新设置其他客户分支的基础

    让我们来说明为什么不建议将补丁从客户端分支“注入”到较旧版本的
    master
    分支

    假设git回购的提交历史记录如下。Client1~4是从
    master
    分支创建的客户端分支,commit
    A
    用于
    1.3
    版本,commit
    C
    用于
    master
    分支上的
    1.5
    。并且在
    client1
    分支上修复了bug

              F---G client2         J---K client4
             /                     /
    …---P---A-----------------B---C  master
             \                 \
              D---E client1     H---I client3
    
    如果在提交
    A
    中插入修复程序(在
    分支上更改历史提交),则它将导致重新基化的
    分支与原始
    分支分开。将修复注入commit
    A
    和rebase
    master
    分支的命令如下:

    git checkout -b temp <commit P>
    git merge client --squash
    git rebase --onto temp <commit A> master
    git branch -D temp
    
    正确的方法应该
    client1
    分支合并到
    master
    分支中,然后在
    master
    branch
    的顶部重新设置其他现有客户分支的基址。具体步骤如下:

    git checkout -b temp <commit P>
    git merge client --squash
    git rebase --onto temp <commit A> master
    git branch -D temp
    
    1.将client1分支合并到主分支 执行以下命令将
    client1
    合并到
    master
    分支中:

    git checkout master
    git merge client1
    git push origin master
    
    然后提交历史记录将是(
    M
    是合并提交):

    2.在主分支顶部重定其他现有客户分支的基址 要在
    master
    分支顶部重新设置其他客户端分支的基础,只需分别在客户端分支上执行
    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 fixed的更改。如果创建了新的客户端分支,它们还将包含对已修复错误的更改。

    我希望以某种方式重新设置主管道的基础(不完全是重新设置基础,因为我真的不知道会发生什么)。因此,从现在起,所有其他想要集成1.3、1.4和后续版本的开发人员,直到1.5版本,都可以从master获得它。这就是问题的重点。@AnastasiosSelmanis我编辑了我的答案以回应你们的评论。谢谢你们的回答。老实说,从我搜索的情况来看,我担心情况会是这样。如果有人有更多的建议,我将继续提问:)
                            J'---K' client4     
                           /                         
                          F'---G' client2
                         /
    …---P---A---B---C---M  master
             \         / \      
              D-------E   H'---I' client3