整合Git支持分支以掌握

时间:2018-07-11 11:36:18

标签: git azure-devops

我在工作中遇到以下情况,我想不出一种解决方法,所以我想寻求帮助。

  1. 我们正在遵循git flow的产品核心功能
  2. 我们有多行发布,所有发布都是从master分支创建的。我的意思是,对于每个客户,我们都会获得Core产品的一个版本(此刻开始),并将其扩展到客户的需求。
  3. 在某些时候,我们希望集成核心产品中发生的所有更改。
  4. 我们通过合并从master到每个分支的更改来做到这一点。

我要问的是以下情况:

  1. 我们要与母版的先前版本集成。假设母版处于1.5时为1.3。
  2. 我们在该标记版本中发现了一个错误。

现在,我们可以在client分支中对其进行修复,并完成集成,然后将该修复程序添加到当前的master(1.5)中并结束。

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

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

我已经看到Support Branches and Hotfixes的Git流程,但是这些分支并不涵盖我的情况。

2 个答案:

答案 0 :(得分:1)

  

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

为此,您需要:

  • 从在master1.3上完成的标记1.3开始创建分支master,在其中应用该修补程序;
  • 在新的master1.3分支之上重新设置1.3版本分支(每个客户端一个)。

OP建议:

  

我想以某种方式进行基准调整(因为我真的不知道会发生什么情况,所以不完全调整基准)master管道。
  这样,从现在开始,每个其他想要集成1.3、1.4及其后续版本的开发者,直到1.5都可以从master那里获得它。

这将意味着在1.3提交之后插入修订,然后应用其余的修订(1.4、1.5):这可以通过交互式基准(git rebase -i)来实现,但问题太大,因为它将更改历史记录每个人都使用的公共分支。

请使用我的“ 1.3修补程序”分支方法。

另一种选择肯定是“将修补程序添加到当前的主版本(1.5)并结束。”:我不建议您弄乱master的提交历史。

答案 1 :(得分:1)

针对您的情况,我建议您将已修复错误的客户端分支合并到master分支(不是像1.3这样的旧版本),然后在最新的master分支的顶部

让我们说明为什么不建议将修复程序从client分支“注入”到较旧版本的master分支。

假定git repo的提交历史如下。 Client1〜4是从master分支创建的客户端分支,提交A适用于版本1.3,提交C适用于{{1}上的版本1.5 }}分支。并且master分支上已修复错误。

client1

如果将修订注入到提交 F---G client2 J---K client4 / / …---P---A-----------------B---C master \ \ D---E client1 H---I client3 中(更改了A分支上的历史记录提交),则将导致重新设置的master与原始master分支分开。将修订注入到提交master并重新设置A分支的命令如下:

master

那么提交历史将是(从原始master分支创建的客户端分支现在不在经过重新定位的git checkout -b temp <commit P> git merge client --squash git rebase --onto temp <commit A> master git branch -D temp 分支上,并且现有的客户端分支实际上不包含已修复的错误):

master

正确的方法应该 F---G client2 J---K client4 / / …---P---A-----------------B---C \ \ \ \ D---E client1 H---I client3 \ A'---B'---C' master 分支合并到client1分支,然后在master分支顶部重新建立其他现有客户端分支的基础。详细步骤如下:

1。将client1分支合并到master分支

执行以下命令以将master合并到client1分支中:

master

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

M

2。在master分支的顶部重新建立其他现有客户分支的分支

要将其他客户端分支重新放置在 F---G client2 J---K client4 / / …---P---A-----------------B---C---------------M master \ \ / \ H---I client3 / \ / ----------------------D-------E client1 分支的顶部,只需在客户端分支上分别执行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

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