A-B-C(main)
|
|-D-E(dev)
然后发现个 bug,需要合入 main 分支(对应图中的 Q), 但是开发人员误合入了 dev 分支(对应途中的 Q'), 由于 dev 也是公共分支, 不能复写历史, 只能 revert(对应图中的 Q''), 然后最终历史变为下图. 其中 Q 和 Q'是相同的修改, Q''是 Q'的 revert.
A-B-C-Q(main)
|
|-D-E-Q'-Q''(dev)
假设这时开发完成了, 我要把 dev 合回 main. 选择把 dev 变基到最新的 main, 但是由于 rebase 的特性, Q'被认为跟 main 上的 Q 是一样的修改, 被 rebase 自动丢弃了. 最终变为下图.
其中 Q'''跟 Q''是等价的,是针对 Q 或者 Q'的 revert, 这样反而导致主线上的修改 Q 被 dev 回退了, 不符合最终目标.
A-B-C-Q(main)-D'-E'-Q'''
有一种解决方案是变基前先将 dev 压缩为一条 commit, 缺点是丢失了历史.
不知道 V 友们是否有更好的解决方法? 在保留 dev 分支历史的情况下.