我们在网站构建中使用Gitflow,我对hotfixes
应该如何工作有疑问。但首先我应该解释一下,我们不会完全使用正常的Gitflow工作流程。
我了解通常你会分支你的features
,他们会在完成时合并到develop
,你会创建你的release
,release
合并到{{1}然后你将它部署为一个真正的版本化版本"。
但是,由于这是客户工作,我们不做"发布"而是在需要时部署功能,因此合并我们master
分支的更改在临时的基础上进入feature
。
这确实会导致问题,因为master
分支从feature
分支,远远超过develop
;将这些master
分支合并到feature
会将其他更改合并到master
中master
在develop
分支时出现的更改,而不是feature
在master
)中。我们知道这不是Gitflow的设计方式,但我们需要某种分支模型,所以我们(有点)通过提交提交而不是合并分支来解决这个问题。
所以,我理解这些问题,而且我不相信他们会为我现在的问题做出贡献,但为了以防万一,这就是我们使用它的方式。不过我的问题是:
hotfixes
如何合并?
在我看来,情景是:
master
是#34; production" develop
领先于master
然后,您想修补hotfix
分支的即时问题。在Gitflow中,此分支来自master
,当您完成hotfix
时,会合并到master
和 develop
但这怎么不会造成大问题?
最近,我尝试创建hotfix
以在一个文件中更改单行副本。我完成了hotfix
,并且更改合并到master
没有任何问题,但是当它厌倦了合并到develop
时,它创建了一个巨大的35文件差异,文件中存在多个合并冲突由于develop
和master
之间的差异,我们没有碰过。
我理解这是因为您要将hotfix
分支(它本身从master
分支到develop
合并,而不是特别是更改或单个提交,因此我理解为什么存在大量合并提交/冲突。
但是,我 从hotfixes
分支,然后合并到master
,这在设计上优于develop
。这就是为什么我不认为我们使用Gitflow的方式是问题,因为无论我们的非标准部署流程如何,master
都会先于develop
- 我可以&# 39;不管项目或确切的工作流程如何,这都不会引起巨大的麻烦。
对我来说似乎没有意义的是,master
可能就像将hotfix
更改为true
或更改电子邮件地址一样简单,无论如何,但要将其纳入false
,您可能不得不与一系列巨大的合并冲突搏斗。这只是标准行为吗?这就是master
的工作原理,如果你必须坐下来解决一场大规模的合并冲突,那么这样呢?提交提交会不会更容易吗?看起来似乎存在如此巨大的范围来为可能发生如此微小变化的错误引入错误 - 您正在处理两个分支,这些分支可能是几个月且相互之间有数百个提交。
我可能只是误解了hotfixes
的过程,但如果是的话,我不确定是哪一点。
答案 0 :(得分:1)
我不明白为什么会有很多冲突。合并到develop
的更改只是最新的修补程序,可能是以前的修补程序,如果它们由于某种原因而没有合并。
(虽然我宁愿将hotfix
合并到master
,然后将master
合并到develop
,而不是直接将hotfix
合并到develop
只是为了避免交叉合并,但它不应该改变很多)
答案 1 :(得分:0)
我相信,即使没有修补程序,如果将 master 合并到 develop 中,您也会看到相同的冲突。
因此修复程序本身不是问题。真正的问题是,为什么将您的大师融合到开发中会产生这么多冲突?答案是gitflow没有正确遵循,否则master中的每个提交都已经被合并到development中。正确完成后,此修补程序合并将按照您期望的方式工作:只有修补程序中的更改应该是新的。
以下应解决此问题。完全合并母版以进行开发,而无需立即提交。您将看到冲突。解决所有这些问题,以便使用develop分支(例如,重置并删除所有更改。)然后提交合并。这个“空合并”应该告诉git开发人员掌握了一切。以后的修补程序应该会更好地工作。
我最近也遇到了同样的问题。我不知道我们的历史(或您的历史)是如何变得混乱的。也许开发人员将更改直接提交给master,而从未将其合并回。也许他们遇到了问题,并尝试使用单独的提交,而不是将更改从一个合并到另一个。这种情况很可能再次发生,所以也许下次我会找出是谁或什么罪魁祸首。