gitflow热修复程序应该如何工作?
我们在web构建中使用Gitflow,我有一个问题,关于gitflow热修复程序应该如何工作?,git,merge,branch,git-flow,hotfix,Git,Merge,Branch,Git Flow,Hotfix,我们在web构建中使用Gitflow,我有一个问题,关于修补程序应该如何工作。但首先我应该解释一下,我们并没有完全使用正常的Gitflow工作流 我知道通常你会将你的功能分支,它们会合并到开发中。完成后,你会创建你的发行版,发行版会合并到主版中,你会将其作为一个实际的“版本化发行版”进行部署 但是,由于这是客户端工作,我们不进行“发布”,而是在需要时部署功能,因此我们的功能分支的更改会临时合并到主 这确实造成了问题,因为功能分支来自远远领先于主功能的开发;将这些功能分支合并到主控中会将其他更改合
修补程序
应该如何工作。但首先我应该解释一下,我们并没有完全使用正常的Gitflow工作流
我知道通常你会将你的功能分支
,它们会合并到开发
中。完成后,你会创建你的发行版
,发行版
会合并到主版
中,你会将其作为一个实际的“版本化发行版”进行部署
但是,由于这是客户端工作,我们不进行“发布”,而是在需要时部署功能,因此我们的功能
分支的更改会临时合并到主
这确实造成了问题,因为功能
分支来自远远领先于主功能的开发
;将这些功能
分支合并到主控
中会将其他更改合并到主控
(在功能
分支时,开发
中出现的更改尚未在主控
中)。我们知道Gitflow不是这样设计的,但我们需要某种分支模型,所以我们(某种程度上)通过cherrypicking提交而不是合并分支来解决这个问题
所以,我理解这些问题,我不认为它们对我现在的问题有影响,但以防万一,我们就是这样使用它的。不过,我的问题是:
应该如何将修补程序
合并到一起?
在我看来,情况是:
master
是“生产”
develope
领先于master
然后,您需要使用热修复补丁
分支来修补即时问题。在Gitflow中,它从master
分支,当您完成hotfix
时,它将合并到master
和develope
但这怎么能不引起大问题呢
最近,我尝试创建一个修补程序
来更改一个文件中的一行副本。我完成了热修复
,更改合并到主控
,没有任何问题,但是当它疲于合并到开发
时,由于开发
和主控
之间的差异,它在我没有接触过的文件中创建了一个巨大的35个文件差异,其中有几个合并冲突
我理解这是因为您正在将修补程序
分支合并到开发
,而不是具体的更改或单个提交,因此我理解为什么会出现大规模合并提交/冲突
然而,我不明白的是,牢记这一点,hotfix
在“现实世界”中是如何工作的,因为它们是从master
分支出来的,然后合并到develope
,这在设计上远远领先于master
。这就是为什么我不认为我们使用Gitflow的方式是个问题,因为无论我们的非标准部署过程如何,develope
都将领先于master
——我不明白为什么无论项目或确切的工作流程如何,这都不会造成巨大的麻烦
对我来说似乎没有意义的是,你的修补程序可以是像将true
更改为false
或更改电子邮件地址这样简单的事情,但要将其转换为master
,你可能必须与大量合并冲突搏斗。这只是标准行为吗?这就是热修复程序的工作方式吗?如果你不得不坐下来解决大规模的合并冲突,那就这样吧?只是高兴地签下承诺不是更容易吗?看起来有这么大的范围来引入一个错误,这可能是一个很小的改变——您正在处理两个分支,它们可能相隔几个月,数百次提交
我可能只是误解了热修复程序的过程,但如果我误解了,我不确定是哪一位。中的第一张图片
我不明白为什么会有很多冲突。合并到develope
的更改仅是最新的修补程序,可能是以前的修补程序中的最新修补程序,如果它们由于某种原因而没有合并的话
(虽然我宁愿将热修复程序
合并到主程序
,并将主程序
合并到开发
,而不是直接将热修复程序
合并到开发
,只是为了避免交叉合并,但变化不大)我相信,如果您将主控程序合并到develop中,即使没有热修复程序,您也会看到相同的冲突
所以修补程序本身不是问题所在。真正的问题是,为什么将你的主人合并到开发中会产生这么多冲突?答案是gitflow没有正确遵循,否则master中的每个提交都会被合并到develop中。正确完成后,修补程序合并将按照您期望的方式工作:只有修补程序中的更改应该是新的
下面的步骤应该可以解决这个问题。在不立即提交的情况下,重新合并master进行开发。你会看到冲突。为开发分支解决所有问题(例如重置并删除所有更改),然后提交合并。这个“空合并”应该告诉git develop拥有master中的所有内容。未来的修补程序应该会更好地工作
我最近也遇到了同样的问题。我不知道我们的历史(或你们的历史)是如何变得混乱的。也许开发人员将更改直接提交到master中,但从未将其合并回来。或者他们遇到问题,尝试使用单独的提交,而不是将一个更改合并到另一个。这种情况很可能再次发生,所以也许下次我会找出谁或什么是罪魁祸首。考虑Gitflow中的存储库提交树