我在git中有一个大文件,后来被删除了。 file_123.xlsx
由于它的大小,我也想从历史记录中删除它,但似乎无法删除。我遵循了许多其他人的指示,内容如下:
git filter-branch --index-filter "git rm -r -rf --cached --ignore-unmatched file_123.xlsx" HEAD
哪个显示文件被删除
rm 'file_123.xlsx'
rewrite xxxxx (168/168)
Ref 'refs/heads/master' was rewritten
然后我按照以下步骤进行垃圾收集
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
但是,当我转到对象文件夹时,仍然可以在文件包中找到该文件。我首先这样做是为了列出较大的Blob ID。
git verify-pack -v packxxx.idx | sort -k 3 -n | tail -3
123abc blob xxx xxx xxx
456abc blob xxx xxx xxx
789abc blob xxx xxx xxx
然后我查看列表中的最后一个
git rev-list --objects --all | grep 789abc
这显示了我尝试删除的文件:
789abcfile_123.xlsx
我的git文件夹的大小完全没有减小。我是否缺少某些内容,或者只是不删除此文件?
答案 0 :(得分:2)
您的过滤器命令为git filter-branch … HEAD
,但您的列表命令为git rev-list … --all
。也就是说,您过滤了一个分支(master
),但在所有分支中搜索了文件。
也过滤所有其他分支:
git filter-branch --index-filter "git rm -r -rf --cached --ignore-unmatched file_123.xlsx" -- --all