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

如何从Git历史中彻底删除重复的A'、B'、C'提交链?

解决Git提交历史混乱的方案

嘿,这个问题我太熟悉了——LFS迁移和回滚很容易搞出这种重复提交+空合并的烂摊子,咱们一步步把历史捋干净:

第一步:定位关键提交哈希

先运行git log --oneline,找到这几个关键提交的短哈希:

  • 原始的C提交(就是你要保留的那条线里的C,不是C'),记为HASH_C
  • E提交(D之后的第一个提交),记为HASH_E

第二步:变基跳过空合并提交D

执行这条命令,把E和F直接接到C的后面,彻底跳过空合并D:

git rebase --onto HASH_C HASH_E^ HEAD

解释一下:HASH_E^表示E的父提交也就是D,这条命令的意思是“把从D之后的所有提交(E、F),重新放到HASH_C的后面”。执行完之后,你的提交历史就会变成A - B - C - E - F,完美符合你的需求!

第三步:清理孤立的A'-B'-C'提交

现在A'-B'-C'这些提交已经没有任何分支引用它们了,Git会在后台自动垃圾回收,但如果你想立刻清理掉,可以运行:

git gc --prune=now

重要注意事项

  • 如果这个分支已经推送到远程仓库,你需要用强制推送来更新远程历史:git push --force,但一定要提前和团队里的其他成员沟通,让他们先拉取旧的历史备份,并且在你推送后重新基于新的历史工作,避免冲突。
  • 如果你本地还有其他分支引用了A'-B'-C',记得也要对那些分支做同样的清理,或者直接删除不需要的分支。

内容的提问来源于stack exchange,提问作者Stanley Winford

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:13:10