美文网首页
记一次删除GIT记录中的大文件的过程

记一次删除GIT记录中的大文件的过程

作者: 扶得一人醉如苏沐晨 | 来源:发表于2023-01-08 09:37 被阅读0次

我有一次将一个大文件误提交了,但是因为文件超过200M,没有提交成功,,后面我把这个大文件删掉后,发现依旧提示文件过大无法提交

image.png

后来排查原因发现,即使你把本地的这个大文件删除了,实际上在.git记录中,这个文件还是存在的,,依旧无法提交

那么我们如何解决呢?

Step 1 查看哪些历史提交过文件占用空间较大

使用以下命令可以查看Git仓库中的提交

git rev-list --objects --all

说明

rev-list命令用来列出Git仓库中的提交,我们用它来列出所有提交中涉及的文件名及其ID。 
该命令可以指定只显示某个引用(或分支)的上下游的提交。

--objects:列出该提交涉及的所有文件ID。

--all:所有分支的提交,相当于指定了位于/refs下的所有引用。

找到我们提交时报错的zip文件,把名字复制下来


image.png

step 2. 重写commit,删除大文件

使用以下命令,删除历史提交过的大文件:

git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch big-file.jar' --prune-empty --tag-name-filter cat -- --all

上面脚本中的big-file.jar请换成你第一步查出的大文件名,或者这里直接写一个目录。
说明

filter-branch命令可以用来重写Git仓库中的提交

--index-filter参数用来指定一条Bash命令,
然后Git会检出(checkout)所有的提交, 执行该命令,然后重新提交。

–all参数表示我们需要重写所有分支(或引用)。
在重写结束后,会有以下日志输出: image.png

step 3. 推送修改后的repo

以强制覆盖的方式推送你的repo, 命令如下:

git push origin master --force

step 4. 清理和回收空间

虽然上面我们已经删除了文件, 但是我们的repo里面仍然保留了这些objects, 等待垃圾回收(GC), 所以我们要用命令彻底清除它, 并收回空间,命令如下:

rm -rf .git/refs/original/

git reflog expire --expire=now --all

git gc --prune=now

至此,我们已经彻底的删除了我们不想要的文件
最后正常再推一遍就好了

相关文章

网友评论

      本文标题:记一次删除GIT记录中的大文件的过程

      本文链接:https://www.haomeiwen.com/subject/fcmscdtx.html