git ignore 怎么添加和删除_git操作-删除.git里提交的大文件

061e11b59e8531a376467a6181210954.png

有时我们的gitignore没有配置,导致一些大文件被误提交上去~

直接开淦:

1.先找到大文件(如果你已经知道是哪个文件以及该文件的路径,可直接进行第二步)

$ git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
verify-pack:用于显示已打包的内容
.git/objects/pack/pack-*.idx:列出提交的pack中涉及的文件ID
sort -k 3:按照第三列进行从上到下排序

这行命令是找到排名前5的大文件存在的git记录,从小到大排列。一般最后一个最大的可能就是我们的大文件提交记录。

050c82f72ae5649202b681a01e805707.png

第一列是表示它的pack的id,拿到它后,这时我们接着下一步,去查看该文件是什么以及文件路径:

2.查找某个id下的大文件内容

$ git rev-list --objects --all | grep ed2ae090b2da43e55e7ef6a436708a01c100b90b
rev-list:用来列出Git仓库中的提交,列出所有提交中涉及的文件名及其ID。
-- objects:列出该提交涉及的所有文件ID。
-- all:所有分支的提交,相当于指定了位于/refs下的所有引用。

此时我们可以看到:

ed2ae090b2da43e55e7ef6a436708a01c100b90b 归档.zip

表示在根目录下有个归档.zip,就是那个大家伙。

3.将该文件从历史记录中移除

git log --pretty=oneline --branches -- 归档.zip

4.重写所有 commit,将该文件从 Git 历史中完全移除

git filter-branch --index-filter 'git rm --cached --ignore-unmatch 归档.zip' -- --all

5.引用完全删除

到这里,历史记录中已经没有该文件了。不过运行 filter-branch 产生的日志还是会对该文件有引用,所以还需要运行以下几条命令,把该文件的引用完全删除:

rm -Rf .git/refs/original //删除git的备份
rm -Rf .git/logs/ // 删除logs
git gc //收集所有松散对象并将它们存入 packfile(垃圾回收)
git prune //删除所有过期的、不可达的且未被打包的松散对象

这是我们再去查看 .git 的大小,小家伙。

(如果还是打的话,继续执行第一步,再次查看哪个大文件,再删除掉)

6.提交

删除之后,需要以强制覆盖的形式提交上去:

$ git push origin xxx --force
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值