有时候我们可能会因为.gitignore等原因误添加了一些文件
删除之后会因为之前commit过导致占用git仓库的空间, 这样非常浪费,尤其是对于那些自建git且有不好的commit习惯的用户
那怎么删除呢?
可以借助git的filter-branch(小心使用,因为操作不当可能导致重要记录丢失)
- 首先查看哪些文件最占用git仓库1git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
rev-list命令用来列出Git仓库中的提交,我们用它来列出所有提交中涉及的文件名及其ID。 该命令可以指定只显示某个引用(或分支)的上下游的提交。
–objects:列出该提交涉及的所有文件ID。
–all:所有分支的提交,相当于指定了位于/refs下的所有引用。
verify-pack命令用于显示已打包的内容。
- 删除历史提交文件1git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch filename' --prune-empty --tag-name-filter cat -- --all
把filename改成你想删除的即可
- 推送repo1git push origin master --force
此时remote repo已经被清理了,但是本地的repo多余的文件还没被清理
- 清理本地repo123rm -rf .git/refs/original/git reflog expire --expire=now --allgit gc --prune=now