使用git rebase -i无法清理提交历史,如何删除旧提交保留新提交?
方案1:使用 git rebase -i 保留指定提交记录
你之前操作未生效大概率是未指定正确的基准提交,按以下步骤操作即可:
- 方法一:列出全量提交操作,直观不易出错
执行命令:git rebase --root -i
在弹出的编辑界面中,删除09axxx、09bxxx、09cxxx三个旧提交对应的行,仅保留09dxxx到09fxxx的行,保存退出即可完成旧提交清理 - 方法二:指定基准提交操作,执行速度更快
执行命令:git rebase -i 09cxxx注意此处的
09cxxx是你需要保留的第一个提交09dxxx的前一个旧提交的哈希前缀
在弹出的编辑界面中确认仅显示09dxxx到09fxxx三个提交,保存退出即可
方案2:使用孤儿分支合并保留的提交为单个初始提交
如果你不需要保留09dxxx到09fxxx的提交历史,想把这三个提交的内容合并为一个全新的初始提交,完全抹除所有旧历史,这个方案操作更简单不易出错:
- 基于当前最新提交创建无任何历史记录的孤儿分支:
git checkout --orphan temp_branch - 暂存当前所有文件后生成新的初始提交:
git add . git commit -m "Init: 仅保留09dxxx之后的代码" - 把需要清理的目标分支(比如main分支)的历史强制重置为当前孤儿分支的状态:
git checkout main git reset --hard temp_branch - 执行
git log确认提交历史符合预期后,删除临时孤儿分支:git branch -D temp_branch
注意事项
- 如果你的代码已经推送到远程仓库,清理完本地历史后需要执行
git push -f强制推送覆盖远程的提交历史 - 如果是多人协作的公共仓库,操作前务必提前通知所有协作者,避免其他人基于旧历史提交产生无法解决的代码冲突
内容的提问来源于stack exchange,提问作者xtreebug
相关产品推荐
相关产品推荐

