git删除历史记录中的大文件详解
前言
git做为常用的工具,代码仓库中是会保存所有历史记录的。虽然,git的.gitignore文件里可以定义一些忽略的文件规则,但是,在提交代码的时候,总会误提交大文件,就会导致:就算我们把它删了重新提交,.git文件夹依然会占用比较大的空间。
如何解决这个问题?
使用下面这个命令
#修改历史提交记录,把不需要的文件永久从历史记录中删除
filter-branch
解决方法
先找出我们需要删除的大文件
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
上面信息表示,最后一条就是最大的一条的记录,d5849e68f5dd66eeb3c3ded6b27a3f4073e0a62d
是它的id
找出该记录对应的文件
#git rev-list --objects --all | grep 记录id
git rev-list --objects --all | grep d5849e68f5dd66eeb3c3ded6b27a3f4073e0a62d
将该文件从历史记录中移除
#git log --pretty=oneline --branches -- 文件路径
git log --pretty=oneline --branches -- node_modules/electron/dist/electron.exe
重写所有的commit,将该文件从git历史中完全移除
#git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch 文件名' --tag-name-filter cat -- --all
git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch node_modules/electron/dist/electron.exe' --tag-name-filter cat -- --all
重写完成
现在历史记录中已经没有该文件了,不过运行filter-branch
产生的日志还有对该文件的引用,所以还需要运行下面的命令删除
rm -Rf ./git/refs/original
rm -Rf ./git/logs/
git gc
git prune
此时,再看文件夹会发现变小了,现在就可以push代码了,不过需要强制push
git push --force
本文作者:makalo
本文链接:https://www.cnblogs.com/makalochen/p/16171201.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
2020-04-20 linux 脚本运行的几种方式