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

如何将Git仓库所有提交合并为仅保留最新内容的单个提交

清空Git提交历史仅保留最新提交的操作方案

操作丢失代码的原因

git rebase -i HEAD~4仅会处理最近4条提交记录,如果你的仓库总提交数超过4条,更早的提交不会被纳入操作范围,会导致历史拼接错乱、最新代码被旧提交覆盖。另外交互式rebase的列表是旧提交在上、新提交在下,如果保留的提交选择错误、squash顺序不对,也会触发代码丢失问题。


方案一:孤儿分支法(最稳妥,零代码丢失风险)

该方案通过创建无历史的全新分支承载最新代码,完全规避rebase操作的风险:

  • 首先执行git status确认当前所有代码改动都已提交,工作区处于干净状态
  • 切换到需要清理历史的目标分支(以main分支为例):git checkout main
  • 创建无任何提交历史的孤儿分支:git checkout --orphan latest_branch
  • 将当前所有最新代码添加到暂存区:git add -A
  • 提交最新代码:git commit -m "init: 仅保留最新代码的初始化提交"
  • 删除原来的主分支:git branch -D main
  • 将当前孤儿分支重命名为主分支:git branch -m main
  • 若需要同步到远程仓库,执行强制推送:git push -f origin main

方案二:软重置法(适合提交历史较短的场景)

如果不想新建分支,可通过软重置合并所有历史,不会修改当前工作区代码:

  • 查询仓库的首次提交哈希值:git rev-list --max-parents=0 HEAD
  • 执行软重置到首次提交,该操作仅会重置提交记录,不会改动本地代码:git reset --soft <你查询到的首次提交哈希值>
  • 提交合并后的所有改动:git commit --amend -m "merge: 合并所有历史为单条提交"
  • 强制推送到远程即可:git push -f origin main

注意:两种方案执行前建议先备份本地仓库代码;强制推送会覆盖远程仓库的提交历史,操作前请确认所有协作者已知晓该改动,避免后续提交冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 01:51:04