【发布时间】:2023-03-19 15:45:01
【问题描述】:
假设我们在 git 中使用以下分支策略:
-
master分支用于持续开发新功能。 -
release分支在即将发布的版本之前的某个时间点创建以稳定。
创建release 分支后,一些开发人员会继续提交master(为以后的版本开发功能),而其他开发人员则致力于完成当前版本。在release 分支存在期间,来自master 的提交不合并,以保持发布分支的稳定性。
在发布时,release 分支中的最终提交带有发布版本的标记。然后,从release 到master 执行合并(显然不是快进,因为两个分支同时开发)。
现在想象一下,稍后(在对master 进行更多提交之后),我们想要将存储库重置回上一个版本的状态。
回滚到master 中的标记发布提交不会导致与我们在release 分支上的不同的存储库状态吗?(除非我遗漏了什么,这会出现这种情况,因为在两个分支都处于积极开发阶段期间对master 的提交即使在回滚master 之后仍保留在提交历史记录中,因为它们发生在标记的发布提交之前。)
Rebase 而不是将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 引用和a/b/@ 987654343@ refs 根据它们的提交时间戳混合在一起。这就是让我失望的原因——平坦的提交历史并没有清楚地表明,如果你回滚到 ref R,那么在 X 之后的所有 o 提交也将被删除!
...o---X---o---a---b---o---c---o---R---M master
^
(v1.0, final commit in release branch)
【问题讨论】:
标签: git version-control merge branch