0%

Git 永久删除文件(包括以前的提交记录)

有些时候我们不小心提交了敏感的文件或者是很占空间的但后面又用不到的大文件,记录将一直存在,即使是revert掉之前的提交,也无法删除记录,所以,我们需要一个方法来永久删除误提交的文件。

删除匹配*.tar的所有文件(把它替换成你需要删除的文件名)

1
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch *.tar' --prune-empty --tag-name-filter cat -- --all

有类似如下输出即表示匹配并执行了重写

1
2
Rewrite ffcdb4019f98b43842dd6164847374ee62e7687a (84/95) (108 seconds passed, remaining 14 predicted)    rm 'assets/attach/dist-20180719-1256.tar'
Rewrite 2f5577bf5560dfc449e394afb7e67c660c7985ca (85/95) (109 seconds passed, remaining 12 predicted) rm 'assets/attach/dist-20180719-1256.tar'

立刻回收空间

1
2
3
4
rm -rf .git/refs/original/ 
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

把改动强制推送到远端

1
git push origin --force --all