我们几乎已经确定了一个分支模型,其中我们有一个master
代表生产代码的release-x.x
分支和一个代表未来版本的分支。
但是,有一些场景我们不确定如何有效解决:
实时错误修复与当前版本无关
一个新
feature
的分支release-2.0
并完全重写了模块A。新
feature
的完成并合并在release-2.0
.发现并修复了当前直播模块 A 中的一个错误
master
。
在这一点上,我们认为有两种可能的情况:
我们 rebase
release-2.0
以master
带来错误修复和修复冲突(丢弃现在无关的错误修复代码)。最终release-2.0
,master
当版本准备好时,我们会合并。我们只挑选与发布相关的错误修复,当发布准备好时,我们用历史
release-2.0
覆盖整个历史。master
release-2.0
解决方案 #1 迫使我们用我们知道不需要的提交来解决合并冲突,但解决方案 #2 迫使我们擦除整个分支并在每次发布master
时用分支的历史记录替换它。release-2.0
这引入了丢失我们忘记挑选的错误修复的轻微可能性,release-2.0
并且还可能破坏在发布之前分支的正在进行的错误修复master
。
一个功能最终没有进入发行版
- 我们创建一个新的
feature
,重新建立基础release-2.0
并将其合并release-2.0
到--no-ff
. - 发现了一些错误,因此我们修复它们
feature
并重做上述合并过程。 - 客户再次查看该功能并决定他们想要更改很多东西 - 没有这些东西,该功能没有任何价值,但我们无法进行这些更改,
release-2.0
并且必须等到release-3.0
.
处理这种情况的正确方法是什么?我们是否应该恢复所有与功能相关的提交,这些提交release-2.0
使用诸如“恢复功能 X - 推回 3.0”之类的消息完成,然后合并feature
到release-3.0
?