git-flow:如何防止在发布分支上进行的某些更改合并回到开发

时间:2013-06-24 09:56:03

标签: git git-merge git-flow

问题在于git-flow方法

的一些边缘情况

我有这样一种典型的git-flow历史:

      o---o---o---o [release-3.5.0]
     /
----o---o---o---o---o [development]

Git-flow告诉我们将 release-3.5.0 分支合并到开发,然后发布就绪了。因此,最终我们将在发布分支处进行所有更改。

      o---o---o---o 
     /             \
----o---o---o---o---o [development]

现在想象一下,我们在发布分支上有一个提交'X',我们不想想要在开发分支上,例如它是某种黑客/修补程序,或者已经在开发中修复了以更健全的方式(即通过提交Y)

      o---X---o---o [release-3.5.0]
     /
----o---o---o---Y---o [development]

那么,主要问题是如何处理这种情况?如何防止这个提交(或提交)重新开发?

3 个答案:

答案 0 :(得分:7)

虽然推荐rebase和/或merge / revert / squash的答案会有效,但我个人认为更好的答案是:

git checkout development
git merge --no-commit release-3.5.0
# make whatever changes you need to fixup the "hack" and/or clean up any conflicts
git commit

答案 1 :(得分:3)

在这种情况下,始终希望完全合并发布(类似)分支。所以要确保没有遗漏任何东西。

但在合并期间,您可以自由修改内容 - 包括删除或重做某些更改。对于您的示例案例,合并分支,还原您不喜欢的提交,并压缩恢复到合并提交。显然在该操作的合并提交消息中做了注释。

如果修复程序已在devel上,则merge将跳过它,或者您可以通过选择devel版本来解决冲突。

关键是你希望历史展示作为你的第二个数字,以及最合适的状态。

答案 2 :(得分:1)

您有几种选择:

1)使用git rebase -i

在此模式下,您可以在开发分支上重新定义发布分支并排除第X次提交。

警告在这种情况下,您将弄乱现有的克隆存储库。

2)使用git cherry-pick

在这种模式下,您可以逐个选择提交。

3)在单独的分支上使用git rebase -i并在之后合并,如本答案中所述:Is it possible to exclude specific commits when doing a git merge?