Rebase 与重放
rebase 为什么会产生新 commit?
同一变化重放到新 parent,会产生不同的 commit 身份。
内容可以相同,身份已经改变。
比较需要重放、无需重放和真实冲突后 abort 三种条件。模型把旧对象与前移到新 tip 的 branch 引用分开。
O、N、B 与 U 是示意 ID。实验会验证真实的新旧 parent,并用明确引用保留旧对象。
静态模型:把 parent 为 B 的 O 重放到 upstream U,会创建 parent 为 U、ID 不同的 N。没有 commit 需要重放时,ID 保持不变。在干净的冲突实验中,rebase --abort 会恢复 topic、Index 与 Working Tree。
预测:每次成功 rebase 都会改变 commit ID 吗?
不会。没有 commit 需要重放时,no-replay 保持原 ID。发生重放时,parent 改变会产生新 ID。