跳转至

2026-08-02

今日主题

  • Git 含合并历史的重写

新增认知

Git 含合并历史的重写

  • 先判断保留对象:历史整理前要先区分目标是保留 merge 拓扑,还是只保留最终文件状态。前者适合交互式 rebase 的保留合并模式;
    后者若还要跨分支、跨提交重新按主题分组,直接从共同基线重建提交通常更清晰。

  • 重建优于硬编排:普通交互式 rebase 会把历史线性化;保留合并模式虽能表示 merge,却引入 label、reset、merge 等拓扑指令。
    当前提是无需保留原分叉结构、且原提交内容彼此交叉时,把累计改动还原到工作区后重新分组,比在复杂 todo 中拆分和排序更可控。

  • 内容身份可验证:提交历史重写会改变 commit hash,但不应意外改变最终内容。可在操作前创建恢复引用,
    并比较重写前后 tree hash、执行零差异检查;只有 tree 完全一致,才能证明此次拍平改变的是历史组织方式,而不是仓库内容。