Git流-摆脱特定功能

Git流-摆脱特定功能,git,branch,release,git-flow,Git,Branch,Release,Git Flow,我目前正试图在我的团队中建立一个开发过程,并阅读GitFlow。这看起来很有趣,但我能发现一些问题 让我们假设以下场景: 我们完成特性F1、F2和F3,并将它们合并到开发分支中。基于此,我们创建了一个发布分支 如果我们想摆脱功能F3,我们该怎么办 请看这张图片,了解更多信息 这确实是git流的一个弱点。在我看来,解决这个问题有多种方法,其中没有一种是完美的 特征还原 一种方法是简单地从F3合并提交 git checkout <release-branch> git revert -

我目前正试图在我的团队中建立一个开发过程,并阅读GitFlow。这看起来很有趣,但我能发现一些问题

让我们假设以下场景:

我们完成特性
F1
F2
F3
,并将它们合并到
开发
分支中。基于此,我们创建了一个
发布
分支

如果我们想摆脱功能
F3
,我们该怎么办

请看这张图片,了解更多信息


这确实是git流的一个弱点。在我看来,解决这个问题有多种方法,其中没有一种是完美的


特征还原 一种方法是简单地从F3合并提交

git checkout <release-branch>
git revert --mainline 1 <hash-of-f3-merge-commit>
从现在起,您可以在发行版中包含每个功能。再次使用
--mainline
选项

git cherry-pick --mainline 1 <hash-of-f1-merge-commit>
git cherry-pick --mainline 1 <hash-of-f2-merge-commit>
如果每个发行版只包含开发功能的一小部分,那么备选发行版基础方法就不是那么糟糕了,但是如果您想要发布大量功能,就很难使用



就我个人而言,我更喜欢后一种方法,因为它可以使历史记录更清晰,没有还原和重复的合并提交。

谢谢Zeeker,是的,我也认为替代版本可能是更好的选择。至少更干净。您认为除了gitflow之外,还有其他不同的工作流可能使用额外的predevelop分支吗?或者通过合并回主节点使用较短的开发分支而不是较长的分支?@Rober遗憾的是,我没有发现任何其他工作流能够更好地处理这种情况。我不知道你所说的
predevelop
分支是什么意思。你必须记住,git flow并不是git中唯一真正的做事方式,它是一个健壮而灵活的工作流,但是没有任何东西可以阻止你在你认为合适的时候对它进行修改。什么会导致你从发布中删除一个功能?理论上,当它进入
develope
时,它已经过测试并准备就绪(基本上是库存)。@R0MANARMY在我看来,可能有很多原因。客户拒绝为该功能付费,他们不想在该版本或任何类似版本中使用它。我认为没有一个好的通用的、纯git的解决方案。在您的示例中,假设您想要剪切功能1,作为该功能的一部分,您引入了功能2所依赖的重构。如果特性是真正独立的,那么答案就是在客户签署发行版之前不要将它们合并到develbranch中。
git cherry-pick --mainline 1 <hash-of-f1-merge-commit>
git cherry-pick --mainline 1 <hash-of-f2-merge-commit>
git merge F1
git merge F2