因累积太多无法提交到 github,如何清除历史变更记录?

 书友51676198 发布于 2022-10-25 09:37

如题,累积有半年没 push 到 github 了,由于里面有几个 jar 没忽略,越来越多,push 后会报:

Counting objects: 4779, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3903/3903), done.
error: RPC failed; result=56, HTTP code = 200 | 14.92 MiB/s
fatal: The remote end hung up unexpectedlyMiB | 158.00 KiB/s
Writing objects: 100% (4779/4779), 628.84 MiB | 152.00 KiB/s, done.
Total 4779 (delta 2353), reused 3 (delta 0)
fatal: The remote end hung up unexpectedly
Everything up-to-date

搜了一些方法,像什么换 ssh 之类,都无效,请问有什么简单办法抛弃掉历史记录,只把当前的版本 push 上去?

实在没办法只好重新 clone 再覆盖,但线上也有几百兆,能有什么命令参数简单抛弃掉就最好了。


找到一个办法 https://www.kernel.org/pub/software/scm/git/docs/git-filter-branch.html 可以清理历史,目前正尝试,OK 后再来续写。

2 个回答
  • rebase,push的时候-f

    2022-11-12 01:41 回答
  • 终于找到简单的办法了,用 git 自带的命令 filter-branch 是可以过滤删除的,但太慢了,我运行了一晚上还没结束,卡在 98% 的进度。后来我找到了 BFG Repo-Cleaner 这个工具,几分钟内就删除干净了,.git 目录大小由原来的 2.9G 左右缩减到 70M,删除过去提交的所有 tar.gz,zip,jar,war 等,只留下源码,总算能 push 到 github 了。

    具体执行流程为:

    bfg --delete-files *.tar.gz # 后面的文件名匹配可换成自己要删除的文件名
    git reflog expire --expire=now --all
    git gc --prune=now --aggressive
    git push --all --force
    git push --all --tags --force
    
    2022-11-12 01:41 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有