假设我们在 git 中使用以下分支策略:
- 不断开发新功能的
master
分支。 release
在即将发布的版本之前的某个时间点创建以稳定的分支。
创建release
分支后,一些开发人员继续致力于master
(为以后的版本开发功能),而其他开发人员则致力于完成当前版本。在分支存在期间,不会合并来自的release
提交以保持发布分支的稳定性。master
在发布时,release
分支中的最终提交被标记为发布版本。release
然后,从into执行合并master
(显然不是快进,因为两个分支上同时开发)。
现在想象一下以后(在更多提交之后master
),我们想要将存储库重置回上一个版本的状态。
回滚到标记的发布提交不会master
导致与我们在release
分支上的不同的存储库状态吗?(除非我遗漏了某些东西,否则情况就是如此,因为master
在两个分支都处于积极开发阶段期间的提交仍然保留在提交历史记录中,即使在回滚之后,master
因为它们发生在标记的发布提交之前。)
变基而不是将分支合并release
回master
似乎可以解决这个问题,但对于多个开发人员来说,这不是一个可行的选择master
。
有什么想法吗?
编辑:感谢@jthill 的回答,添加图表来解释情况以及我为什么感到困惑。
这是实际发生的情况的图表:
...o---X---o---o---o---M master
\ /
a---b---c---R release
^
(v1.0, final commit in release branch)
现在,这是一个线性提交历史的图表master
(这导致了我错误的心理模型)——请注意,o
refs 和// a
refs基于它们的提交时间戳混合在一起。这就是让我失望的地方——平坦的提交历史并没有清楚地表明,如果你回滚到 ref ,随后的所有提交也将被删除!b
c
R
o
X
...o---X---o---a---b---o---c---o---R---M master
^
(v1.0, final commit in release branch)