首页 > 其他分享 >git操作-删除.git里提交的大文件

git操作-删除.git里提交的大文件

时间:2023-07-26 17:33:23浏览次数:31  
标签:文件 git 删除 -- filter blob 提交

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

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

git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5

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

918f1535244c0d22b45f24abfafa3f2560623f64 blob   157684 20766 3891954
1abd344e1dfaec710490947cdab7fd73f99f6baf blob   190633 65825 5005204 1 c5f2c76a1205f4cbbf018adfc2db54921fdcd448
a93a46947ffc5df73e97d1c42445c217008c91e7 blob   286863 132594 3545435
c5f2c76a1205f4cbbf018adfc2db54921fdcd448 blob   490195 70876 4934328
4bc4e7daaa3efdd68bc9a22e95377c474bef95c3 blob   1668096 730291 5460526

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

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

git rev-list --objects --all | grep 918f1535244c0d22b45f24abfafa3f2560623f64

此时我们可以看到:

918f1535244c0d22b45f24abfafa3f2560623f64 pilotage/navigation_provider.cc

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

git log --pretty=oneline --branches -- pilotage/navigation_provider.cc

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

git filter-branch --index-filter 'git rm --cached --ignore-unmatch pilotage/navigation_provider.cc' -- --all

如果是删除文件夹,则采用如下命令

git filter-branch --index-filter 'git rm --cached -r --ignore-unmatch pilotage/' -- --all

在执行结果中关注哪个分支发生了改变,信息如下,改变的分支后续都要强制重新推送。

Ref 'refs/remotes/origin/V1.0_Gateway' was rewritten

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

 参考链接:https://zhuanlan.zhihu.com/p/282765421

标签:文件,git,删除,--,filter,blob,提交
From: https://www.cnblogs.com/pikaiqiu/p/17581610.html

相关文章

  • uva 10061 How many zero's and how many digits ?(在不同进制下分解因子)
                             uva10061Howmanyzero'sandhowmanydigits?Givenadecimalintegernumberyouwillhavetofindouthowmanytrailingzeroswillbethereinitsfactorialinagivennumbersystemandalsoyouwillhaveto......
  • git 随笔
    gitrev-parsegitconfiggitsubmodulegitrev-rebosegitshow-refgitvargitfor-each-ref--sort=-committerdate--format="%(committername)@%(refname:short)[%(committerdate:short)]"gitconfig--globalcolor.uitrue#打开所有的默认终端着色gitconfig-......
  • Java中代码Bug记录--泛型失效、数组删除、HashMap死循环
    最近在工作的过程中,遇到了不少奇怪自己或者同事的Bug,都是一些出乎意料的,不太容易发现的,记录一下来帮助可能也遇到了这些Bug的人1.编译时泛型校验失效Map<String,String>nameToType=newHashMap<>();nameToType.put("testName",123);//java:不兼容的类型:int无法转......
  • 《Pro Git》Git分支笔记
    Git分支简介在Git中,有个校验和的概念,主要用于验证数据完整性,它是一个40位16进制字符串,使用SHA-1哈希算法生成。校验和也标识了Git中每一个对象。我们由前一章阅读了解到Git保存的是文件快照而非内容差异变化。而暂存和提取操作中怎么保存文件快照呢?这和对象又有什么关联?首先,暂......
  • git clone报错:HTTP Basic: Access denied
    解决方案:打开控制面板-用户账户-凭据管理器,修改此凭据或者添加,即可解决。......
  • git 撤回操作(IDEA中,撤回已经commit未push的
     退回上次commit,输入HEAD^退回到第2次提交之前,输入HEAD~2精确退回到指定commit版本,输入id号可以在执行的时候打开下面的窗口,方便观察文件动态:......
  • 转:如何快速使用GITHUB资源
    <divclass="postBody"><divid="cnblogs_post_body"class="blogpost-bodyblogpost-body-html"><aname="_labelTop"></a><divid="navCategory"><h2>思维导航<......
  • 五分钟教你使用GitHub寻找优质项目
    前言经常会有同学会问如何使用GitHub找到自己想要的项目,今天咱们就出一期快速入门教程五分钟教你使用GitHub寻找优质项目。GitHub作为世界上最大的项目开源平台之一,上面有着无数优质的开源项目。善于使用它能够让你获得很多意想不到的惊喜。首先解决访问慢的问题FastGithub是Gi......
  • layui 表单提交
    新手小白,使用layui的时候,表单如何像普通表单那样提交呢?如下:只需要在回调函数里返回true,并且在form表单正常添加action和method属性就行!如果返回false;将会拦截 阻止默认form跳转,此时可以在函数里通过ajax进行数据交互 <formclass="layui-form"action="${basepat......
  • Git工具推荐
    推荐软件FastGithub可以让你轻松访问github推荐网站github加速访问输入github网址,生成快速访问地址gitclone加速器输入要下载的github网址,生成替代下载网址推荐谷歌插件GitHub加速1.0.8参考此博客下载安装......