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

如何保留Git仓库最后100个提交并合并其余历史为单个提交?

保留Git仓库最近100次提交并合并早期历史的方案

前置检查

  • 确保本地仓库无未提交修改,执行:
    git status
    
    如有未提交内容,先完成提交或暂存。

具体操作步骤

  1. 定位目标提交
    执行命令获取倒数第100个提交的哈希值(假设当前分支为main):

    git rev-parse HEAD~100
    

    将输出的哈希值记为OLD_COMMIT(例如a1b2c3d)。

  2. 创建临时分支处理历史
    如果OLD_COMMIT不是仓库的第一个提交,切换到它的父提交创建临时分支:

    git checkout -b rewrite-history OLD_COMMIT^
    

    若OLD_COMMIT是根提交,执行:

    git checkout --orphan rewrite-history OLD_COMMIT
    
  3. 合并早期历史为单个提交
    清空临时分支内容,复制OLD_COMMIT的所有文件并提交为初始历史:

    git rm -rf .
    git checkout OLD_COMMIT -- .
    git commit -m "合并早期所有历史为单个初始提交"
    
  4. 迁移最近100次提交
    将原分支上最近100次提交迁移到临时分支:

    git cherry-pick OLD_COMMIT..main
    

    若遇到冲突,解决冲突后执行git cherry-pick --continue,直至所有提交迁移完成。

  5. 替换原分支
    切回原分支并覆盖为处理后的历史:

    git checkout main
    git reset --hard rewrite-history
    
  6. 清理临时分支

    git branch -D rewrite-history
    
  7. 强制推送至远程(重要提示)
    由于重写了历史,需强制推送到远程仓库,务必提前告知所有协作成员:

    git push -f origin main
    

后续优化

合并历史后,执行以下命令进一步压缩仓库体积(针对图片多的场景效果更明显):

git gc --aggressive --prune=now

关键注意事项

  • 历史重写会破坏远程仓库原有历史,单人仓库可放心操作,多人协作必须提前同步。
  • 操作前建议完整备份仓库文件夹,避免数据丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:50:51