[git]git 的一个变基问题.

查看 64|回复 1
作者:kyonn   
最开始分支是这样的
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 分支历史的情况下.

dev, main, 变基, 分支

Pastsong   
丢弃掉老的 main 分支,直接从 dev fork 出新的 main 分支
您需要登录后才可以回帖 登录 | 立即注册

返回顶部