如何保留Git仓库最后100个提交并合并其余历史为单个提交?
保留Git仓库最近100次提交并合并早期历史的方案
前置检查
- 确保本地仓库无未提交修改,执行:
如有未提交内容,先完成提交或暂存。git status
具体操作步骤
定位目标提交
执行命令获取倒数第100个提交的哈希值(假设当前分支为main):git rev-parse HEAD~100将输出的哈希值记为
OLD_COMMIT(例如a1b2c3d)。创建临时分支处理历史
如果OLD_COMMIT不是仓库的第一个提交,切换到它的父提交创建临时分支:git checkout -b rewrite-history OLD_COMMIT^若
OLD_COMMIT是根提交,执行:git checkout --orphan rewrite-history OLD_COMMIT合并早期历史为单个提交
清空临时分支内容,复制OLD_COMMIT的所有文件并提交为初始历史:git rm -rf . git checkout OLD_COMMIT -- . git commit -m "合并早期所有历史为单个初始提交"迁移最近100次提交
将原分支上最近100次提交迁移到临时分支:git cherry-pick OLD_COMMIT..main若遇到冲突,解决冲突后执行
git cherry-pick --continue,直至所有提交迁移完成。替换原分支
切回原分支并覆盖为处理后的历史:git checkout main git reset --hard rewrite-history清理临时分支
git branch -D rewrite-history强制推送至远程(重要提示)
由于重写了历史,需强制推送到远程仓库,务必提前告知所有协作成员:git push -f origin main
后续优化
合并历史后,执行以下命令进一步压缩仓库体积(针对图片多的场景效果更明显):
git gc --aggressive --prune=now
关键注意事项
- 历史重写会破坏远程仓库原有历史,单人仓库可放心操作,多人协作必须提前同步。
- 操作前建议完整备份仓库文件夹,避免数据丢失。
内容的提问来源于stack exchange,提问作者MathisGauthey
相关产品推荐
相关产品推荐

