You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需rebase与额外提交,能否移除Git仓库中已合并分支的冗余提交?

移除Git合并分支提交的方法

已知仓库提交历史为:

A-B---C---D-H-I
   \     /
    E-F-G

目标是修改为:

A-B---C---H-I

且要求不使用rebase、不创建额外提交,同时已知提交C与D的工作目录内容完全一致。

操作步骤:

  • 获取提交C、D、H的哈希值(可通过git log --oneline查看)。
  • 修改提交H的父节点,将其从D指向C:
    git replace <commit-H> --edit
    
    在弹出的编辑器中,找到包含parent <commit-D>的行,将<commit-D>替换为<commit-C>,保存后退出。
  • 固化提交历史修改(让替换永久生效,而非仅本地临时引用):
    git filter-repo --force
    
  • 清理无引用的旧提交(可选,Git会自动在垃圾回收时清理,也可手动触发):
    git gc --prune=now
    

原理说明:

因为提交C和D的内容完全一致,修改H的父节点后,H的变更逻辑不受影响。git replace仅临时修改提交对象的父节点引用,git filter-repo会基于此重写后续提交(H、I)的哈希值,但提交内容保持不变,最终移除了合并分支E-F-G及提交D的历史痕迹。

内容的提问来源于stack exchange,提问作者Denis Sivtsov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 02:45:28