如何彻底删除git上的内容

如何彻底删除git上的内容

当不小心把一些不需要的文件加入了项目(例如node_modules这种体积特别大的文件夹、或者密码这类不适合放到github的文件)。虽然我们可以后面把文件删除,然后再提交一次达到在项目中看不到的目的。但是仍然可以通过git的历史记录看到,而且这样也会让.git变得更大,整个仓库体积变大。

git filter-branch

git自带一个从所有的提交中删除文件的命令。这里以删除项目中的src/example.yml为例:

git filter-branch --tree-filter 'git rm --cached --ignore-unmatch src/example.yml' HEAD

这一步会重新从删除文件开始,所有的commit生成新的commit号。 这个时候可以使用git push --force命令强制推到远程仓库。

注意:如果是多人协作,在你强制推到远程仓库后,其他人本地会出现远程仓库HEAD不一致的问题。这个时候,需要其他人删除本地项目,重新拉取新的项目。

去掉大文件

git在源码层面对一个文件的变更做了很多优化,所以一般不是为了彻底删除某些文件,就算项目是维护多年的巨型项目,也不需要对.git的体积过于担忧。一般来说,一个千万行级别的代码,其体积也不超过5G。这个对比我们动辄几个G的node_modules来说,体积不算大。

但是当一个项目里面有较多的图片和视频这类文件非文本类文件时,如果这类文件体积特别大,直接删除仍然不会减小整个项目的体积。这个时候,我们一般可以用彻底删除的方法。

除了可以使用git filter-branch删除以外,还有一个开源工具BFG Repo-Cleaner实现通用的功能,这个开源工具的优点是更快。

你可能感兴趣的:(git)