在使用版本管理工具的过程中我们会碰到这样的问题,不小心把一个不该加入版本管理的文件加进去了,有时候这个文件很大,也许我们整个版本库才几百 KB,但加进去这个没用的文件却有好几百MB,因为这一个文件把整个版本库搞得硕大无比,以后维护备份很不方便;还有时候是不小心把一个敏感文件 加进去了。这时候我们希望能把它从版本库中永久删除不留痕迹,不仅要让它在版本历史里看不出来,还要把它占用的空间也释放出来。
在svn中的办法是把整个版本库dump出来filter一下再load回去。
git中可以用下面的方法来实现:
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch path/to/your/file' HEAD
git push origin master --force
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now