方案一:Merge + Revert 方案二:Reset + Cherry-pick
阶段1:初始状态
a:
b: 123
c: 45678
阶段1:初始状态
a:
b: 123
c: 45678
阶段2:b 合并 c 并继续开发
b: 12345678910
阶段2:b 合并 c 并继续开发
b: 12345678910
阶段3:b 回滚合并, b 继续开发
b: 12 3 4 5 6 7 8 910revert(merge c)
差异:
此时 revert(merge c) 实际撤销了 4,5,6,7,8 的更改,但 9,10 依然保留。
阶段3:b 重置并 cherry-pick
b: 123910
差异:
左侧通过 revert 撤销合并,右侧直接 reset 到合并前并 cherry-pick 新提交,避免了 revert 带来的副作用。
阶段4:a 合并 c 的 4,5,6
a: 456
阶段4:a 合并 c 的 4,5,6
a: 456
阶段5:a 合并 b
a: 456123 4 5 6 7 8revert(merge c)910
差异:
revert(merge c) 也被合并进 a,导致 a 上 4,5,6 的更改被撤销。
阶段5:a 合并 b
a: 456123910
差异:
没有 revert(merge c) 的副作用,a 上 4,5,6 保持不变。
最终结果
a: 456123revert(merge c)910
a 分支的 4,5,6 被 revert(merge c) 撤销,内容丢失。
最终结果
a: 456123910
a 分支完整保留了 4,5,6,没有被撤销,内容安全。