那个问题(dev分支被“未经批准但已经集成”的功能分支污染)正是
Raman Gupta在“
Git创建者如何进行分支”中所描述的。
(此工作流的GitHub repo:
rocketraman/gitworkflow
)
在您的情况下(gitflow),您需要在合并dev到release之前撤销非批准功能的合并提交。
但是,“gitworkflow”使用临时分支,与gitflow相反:
GitFlow主张有两个永久分支-master
和develop
无论是gitflow还是gitworkflow,都使用“feature”或“topic”分支:
“主题分支是当前所有工作都在进行的地方——每个问题、错误或特性都有一个分支,可以同时进行多个主题分支的开发。”
“在gitworkflow中,主题最终会合并到“next”分支中。然而,一个关键的区别是“next”分支从未合并到“master”(与永恒分支“develop”相反,后者旨在合并到gitflow的“master/release”分支)。”
现在,
topic
已经升级到
next
,可以成为beta版或验收版的一部分。因此,
next
上的每个主题现在都可以进行第二轮稳定,这正是beta版/验收测试环境的目的。
但是,请注意,使用gitworkflow时,我们仍然没有承诺将此
topic
作为下一个生产发布的一部分 - 它仍未合并到
master
中。
这类似于GitFlow的release
分支的概念,但更加灵活和强大,因为master
完全不依赖于next
,也从不将next
整体合并到master
(与相应的GitFlow分支develop
和release
不同)。
如果
next
未合并到
master
,那么如何将功能升级到生产环境?
一旦一个主题被认为足够稳定发布,该主题再次毕业并与
master
(或者也许是
maint
)合并,再次使用
--no-ff
以保留主题分支的完整历史记录。
为什么这样做更好:
请注意,在gitworkflow中,不会在同一分支上混合不稳定和稳定的开发工作。相比之下,使用GitFlow有两个选择:
1.我可以在自己的分支上孤立地测试我的主题,或者
2.我可以将其合并到
develop
以进行测试。
两种选择都不理想。
前者不能真正测试主题在与其他正在进行的工作一起部署时的稳定性,而后者可能在主题稳定之前就将其提交到
develop
。
含义:
简而言之,在GitFlow中,始终存在一种无法解决的紧张关系,即在主题分支上保持开发工作的清洁和隔离的愿望与将主题分支与其他工作集成以将它们合并到develop分支以使其可见和可测试并检查冲突之间的平衡。Gitworkflow可以实现两个目标而不牺牲任何一个。