gitflow热修复程序应该如何工作?

gitflow热修复程序应该如何工作?,git,merge,branch,git-flow,hotfix,Git,Merge,Branch,Git Flow,Hotfix,我们在web构建中使用Gitflow,我有一个问题,关于修补程序应该如何工作。但首先我应该解释一下,我们并没有完全使用正常的Gitflow工作流 我知道通常你会将你的功能分支,它们会合并到开发中。完成后,你会创建你的发行版,发行版会合并到主版中,你会将其作为一个实际的“版本化发行版”进行部署 但是,由于这是客户端工作,我们不进行“发布”,而是在需要时部署功能,因此我们的功能分支的更改会临时合并到主 这确实造成了问题,因为功能分支来自远远领先于主功能的开发;将这些功能分支合并到主控中会将其他更改合

我们在web构建中使用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中的存储库提交树