13

我们使用 Gitflow 进行 Web 构建,我有一个关于hotfixes应该如何工作的问题。但首先我应该解释一下,我们并没有完全使用正常的 Gitflow 工作流程。

我知道通常你会分支你的features,他们会develop在完成后合并到,你会创建你的releaserelease合并到master并部署它,作为一个实际的“版本化版本”。

但是,由于这是客户工作,我们不进行“发布”,而是在需要时部署功能,因此我们分支的更改会临时feature合并到其中。master

这确实引起了问题,因为feature分支是从develop前面分支出来的master;将这些feature分支master合并到会将其他更改合并到master(分支时尚未出现的develop更改featuremaster。我们知道这不是 Gitflow 的设计方式,但我们需要某种分支模型,所以我们(某种程度上)通过挑选提交而不是合并分支来解决这个问题。

所以,我理解这些问题,我不相信它们会导致我现在遇到的问题,但以防万一,这就是我们使用它的方式。但是我的问题是:

hotfixes 应该怎么合并?

在我的脑海中,场景是:

  • master是“生产”
  • develop领先于master

然后,您想要修补hotfix分支的直接问题。在 Gitflow 中,这从 分支master,当你完成时hotfix,它被合并到master develop

但这怎么不会造成巨大的问题呢?

最近,我尝试创建一个hotfix以更改一个文件中的单行副本。我完成了hotfix,并且更改合并到master没有问题,但是当它厌倦了合并到 时,它创建了一个巨大的 35 个文件差异,由于和develop之间的差异,我没有接触过的文件中有几个合并冲突。developmaster

我知道这是因为您正在合并hotfix 分支,该分支本身是从分支到分支的,而master不是develop具体的更改或单次提交,所以我理解为什么会出现大规模的合并提交/冲突。

但是,我明白的是,考虑到这一点,hotfixes“在现实世界中”如何工作,考虑到它们masterdevelopmaster. 这就是为什么我认为我们使用 Gitflow 的方式不是问题的原因,因为无论我们的非标准部署过程如何,develop都会领先于我们 - 我不明白为什么无论项目如何,这都不会引起巨大的头痛master或确切的工作流程。

对我来说似乎没有意义的是,您hotfix可能只是将 a 更改true为 afalse或更改电子邮件地址等简单的事情,但是要进入master,您可能必须与大量的合并冲突作斗争。这只是标准行为吗?这就是hotfixes工作方式吗?如果您必须坐下来解决大规模的合并冲突,那就这样吧?只是愉快地选择一个提交不是更容易吗?似乎有如此巨大的空间为可能如此微小的变化引入错误 - 您正在处理两个分支,它们可能相距数月和数百次提交。

我可能只是误解了 的过程hotfixes,但如果我是,我不确定是哪一点。

4

2 回答 2

2

对于此链接中的第一张图片

在此处输入图像描述

我不明白为什么会有很多冲突。合并到的更改develop只是最新的修补程序,可能是以前的修补程序,如果它们由于某种原因没有被依次合并。

(虽然我宁愿把hotfixintomaster和它们合并masterdevelop,而不是直接合并hotfixdevelop,只是为了避免纵横交错的合并,但应该不会有太大变化)

于 2017-08-17T13:13:36.850 回答
1

我相信如果您将master合并到develop中,即使没有修补程序,您也会看到相同的冲突。

所以修补程序本身不是问题。真正的问题是,为什么将你的master合并到develop会产生这么多冲突?答案是没有正确遵循 gitflow,否则 master 中的每个提交都已经合并到 develop 中。正确完成后,修补程序合并按您期望的方式工作:只有修补程序中的更改应该是新的。

以下应该解决它。在不立即提交的情况下进行新的 master 合并。你会看到冲突。将它们全部解决以支持开发分支(例如重置并删除所有更改。)然后提交合并。这个“空合并”应该告诉 git,develop 拥有 master 中的所有内容。未来的修补程序应该会更好地工作。

我最近遇到了同样的问题。我不知道我们的历史(或你的)是如何变得混乱的。也许开发人员直接将更改提交到 master 并且从未将其合并回来。或者他们可能遇到问题并尝试使用单独的提交而不是合并从一个到另一个的更改。它可能会再次发生,所以也许下次我会找出谁或什么是罪魁祸首。

于 2020-07-29T16:29:24.990 回答