我在工作中遇到以下情况,我想不出一种解决方法,所以我想寻求帮助。
我要问的是以下情况:
现在,我们可以在client分支中对其进行修复,并完成集成,然后将该修复程序添加到当前的master(1.5)中并结束。
但是,将此修复程序“注入”到主版本1.3中将非常有帮助。这样,任何其他试图集成此版本的人都将拥有此修复程序。
现在,从我的角度来看,这种思想的对象带有对版本控制进行编号的漏洞概念,但我认为在某些情况下确实有帮助,所以我想问问是否有人以某种方式处理它或是否有git我错过的过程。
我已经看到Support Branches and Hotfixes的Git流程,但是这些分支并不涵盖我的情况。
答案 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
分支顶部重新建立其他现有客户端分支的基础。详细步骤如下:
执行以下命令以将master
合并到client1
分支中:
master
然后,提交历史将为(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
分支的顶部,只需在客户端分支上分别执行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
现在所有现有的客户端分支都包含已修复的错误更改。而且,如果创建了新的客户分支,它们还将包含已修复错误的更改。