在 git / GitLab 中管理长期存在的分支



使用git我有两个长期存在的分支:masterdevelop。功能分支取自develop,完成后合并回develop。一旦我们满意,我们就会将内容合并到master中。

我遇到的"问题"是master现在比develop提交一个。因此,从develop的尖端获取的下一个分支是master后面的一个提交。我应该担心这个吗?

我知道这可以通过执行快进合并到master中来处理(因此不会创建额外的合并提交),但我真的需要关心这个吗?我问的原因是,感觉develop在每次新feature>develop>master合并时都会变得越来越偏离master

编辑:我正在使用GitLab/GitHub。合并请求/拉取请求功能需要非快进合并。

我唯一担心的是为什么master需要与develop合并。这应该是一个快进。这表明master中有些东西不在develop,比如热补丁,所以你不是在生产中的所有东西之上开发。

你应该有这样的情况:

B - C   E - F   H - I
/      /      /     
A ----- D ----- G ------ J [develop]
[master]

master位于 D 处,并且之前已合并了一个功能分支(B、C、D)。develop在J,并合并了两个功能分支。当你git checkout master; git merge develop它应该是一个简单的快进到J。

如果您需要合并,则意味着masterdevelop已经分道扬镳。这可能意味着有人热补丁master并且该补丁没有回到develop。例如,热补丁为 E。

B - C   E - F   H - I
/      /      /     
A ----- D ----- G ------ J [develop]

L [master]

现在,当您git checkout master; git merge develop时,它将需要合并。

B - C   E - F   H - I
/      /      /     
A ----- D ----- G ------ J [develop]
                
L -------------- K [master]

这种情况将继续发生。

这不仅仅是一个麻烦。这意味着develop永远不会真正反映合并后将在master中运行的代码。您正在开发和测试的代码库与生产中的代码略有不同。最终,您将完全测试的develop合并到master中,生产将中断。


您可能需要查看使用这些技术之一master中是否有任何不develop提交,并将它们挑选到master中。

或者,您可以rebase开发到主节点上,而不是合并,可能使用-p来保留您的功能分支。然后合并(即快进)。

那会是这样的,从热补丁大师开始......

B - C   E - F   H - I
/      /      /     
A ----- D ----- G ------ J [develop]

L [master]

然后git checkout develop; git rebase -p master.

B - C        E1 - F1  H1 - I1
/           /       /      
A ----- D - L ------ G1 ------ J1 [develop]
[master]

现在,您可以全面测试develop知道它拥有"合并"到master中后将拥有的一切。

最新更新