不小心把很大的文件提交到了Gi仓库中,尽管很快就删除了,并提交了所有内容,但是文件仍然在存储库中,在历史上。

一条简单但强大的命令?

git filter-branch --tree-filter 'rm -f BIG-FILE' HEAD

--tree filter选项在每次checkout项目后运行指定的命令,然后重新提交结果。在这种情况下,从每个快照中删除一个名为BIG-FILE的文件,不管它是否存在。


另外一种情况是,我想把 仓库中大于100MB的文件和历史都删除,怎么办呢?

使用 BFG Repo-Cleaner,这是一个更简单、更快的Git filter-branch的替代品,专门为从Git历史中删除不需要的文件而设计。

请仔细遵循使用说明,核心部分如下:

$Java-Jar BFG.jar ——大于100M MyReP.GIT的条形斑点

任何大小超过100MB的文件(不在最新提交的文件中)都将从Git存储库的历史记录中删除。然后可以使用git gc清除死区数据:

$git gc--prune=now--aggressive

bfg通常比运行git filter分支至少快10-50倍,而且通常更容易使用。