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

后来排查原因发现,即使你把本地的这个大文件删除了,实际上在.git记录中,这个文件还是存在的,,依旧无法提交
那么我们如何解决呢?
Step 1 查看哪些历史提交过文件占用空间较大
使用以下命令可以查看Git仓库中的提交
git rev-list --objects --all
说明
rev-list命令用来列出Git仓库中的提交,我们用它来列出所有提交中涉及的文件名及其ID。
该命令可以指定只显示某个引用(或分支)的上下游的提交。
--objects:列出该提交涉及的所有文件ID。
--all:所有分支的提交,相当于指定了位于/refs下的所有引用。
找到我们提交时报错的zip文件,把名字复制下来

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参数表示我们需要重写所有分支(或引用)。
在重写结束后,会有以下日志输出:

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
至此,我们已经彻底的删除了我们不想要的文件
最后正常再推一遍就好了
网友评论