有没有办法告诉 Git 为什么要保留一个文件,即使我相信它必须放手?我正在尝试通过删除大文件来重写提交历史记录。这是我所做的:
git filter-branch -f --tree-filter "rm -rf *.mp4" 573edba..HEAD
我也试过:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch *.mp4' 573edba..HEAD
我看到他们被报告为已删除。我也跑了git gc
。
我在存储库中有两个分支,所以我在主分支和开发分支上都运行了它。
现在,如果我这样做:
git ls-files | grep '.mp4'
或者
git show --pretty="format:" --name-only 573edba..HEAD | grep '.mp4'
我没有得到任何结果。
但是,当我像这样检查索引文件时:
git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr
然后我取第一个 SHA1,看看它是什么:
git rev-list --all --objects | grep $SHA1
我明白了/path/to/file.mp4
问题:我如何永远摆脱那个文件?我怎么知道为什么该文件仍在存储库中?是什么让 Git 相信它必须存在?