我正在尝试使用 Gerrit 实现“git-flow”类型的工作流,但我似乎无法弄清楚最后一块拼图。
我的问题有两个先决条件:
- Gerrit 只会合并到一个分支
- 我不允许将合并提交推送到 Gerrit。更改获得批准后,合并必须由 Gerrit 完成
我要解决的问题如下。考虑这种 git 情况:
Master 0
\
\
Develop 0-----0-----0-----0
有一个带有一个提交的 master 分支和一个从 master 派生的带有几个附加提交的开发分支。一段时间后,develop 分支合并回 master 以创建下一个生产版本。开发人员使用来自开发的主题分支和严格的变基。在推送之前,他们的提交总是基于最新的上游开发。这应该会导致线性历史记录,并且只会快进提交。
现在假设有人从 master 创建了一个 hotfix 分支并合并回 master:
Master 0--------0 HF
\
\
Develop 0-----0-----0-----0
这个提交现在只合并到主分支,但开发人员需要在他们的开发分支中提交这个提交,以将错误修复合并到他们的更改中。通常你会合并主分支来开发开发分支,但考虑到我的先决条件,这是不可能的,因为它会创建一个本地合并提交。
我的问题是:如何将主分支的新提交合并到本地开发分支中,以便开发人员的任何新更改都包含错误修复?理想情况下,我会修改我的脚本以首先将错误修复更改应用到本地开发分支(合并但没有合并提交),然后重新设置开发人员的提交并推送。这样,错误修复将自动添加到他们的新更改中,并将被视为新提交的一部分,而不是单独的提交。
我一直在考虑可能的解决方案:
- Cherry 选择提交到开发分支。我相信下次开发与 master 合并时,这将始终导致重复提交。有没有办法解决?
- 如此处所述的变基: http ://davitenio.wordpress.com/2008/09/27/git-merge-after-git-cherry-pick-avoiding-duplicate-commits/ 。自从发布了开发分支后,这可能会导致问题,或者不会?
我希望我的问题很清楚。如果需要进一步澄清,请告诉我。我知道我的工作流程非常严格,但与 Gerrit 结合使用将是理想的选择。如果它不能完成,那么我可能会允许合并提交......