从整个git存储库中完全删除文件

时间:2013-06-01 21:40:38

标签: git github git-commit

对项目使用git,我不小心在一个提交中添加了一个大.zip文件。在我开始将它上传到github之前我没有注意到。当我注意到时,我点击ctrl-cgit removegit commit并再次上传(现在文件未跟踪)。

我知道这不是正确的选择,因为一旦我提交.zip,它就会一直保留在回购中,直到我恢复提交,但遗憾的是我没有。

现在,当有人试图从repo下载时,需要花费大量时间来完成它,有时会产生git the remote end hung up unexpectedly(我读过的可以通过做一些git config来解决)非常烦人。

我的观点是:有没有办法告诉在此特定提交版本中忘记此特定文件的进一步拉/取请求?

2 个答案:

答案 0 :(得分:62)

Github像这样提供useful help page on removing files。 StackOverflow上还有其他问题,涵盖了这个

另见this section of the Pro Git book,这是一个例子:

  

要从整个历史记录中删除名为passwords.txt的文件,您可以   使用--tree-filter选项过滤分支:

$ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
Rewrite 6b9b3cf04e7c5686a9cb838c3f36a8cb6a0fc2bd (21/21)
Ref 'refs/heads/master' was rewritten

清理完成后,您还可以尝试git gc进一步压缩和清理存储库。

答案 1 :(得分:4)

现在有一个名为" BFG Repo-Cleaner"的工具,它在github.com上被提及作为filter-branch的替代https://help.github.com/articles/remove-sensitive-data/

链接到工具的页面https://rtyley.github.io/bfg-repo-cleaner/