Git 从所有以前的提交中删除特定文件

Git remove specific files from all previous commits

我开始了一个小项目 (10mb),随着它的增长和生成输出图像,它呈指数级增长(到 12 GB)。我意识到我上传的图片不是代码的一部分。我删除了它们,添加了一条不上传图片的规则并继续提交。现在的问题是代码仍然是几 mb,但整个存储库重 2 GB。我想还原或删除我上传图片的历史记录中的所有更改我的意思是每次发送

new file: image.png 

它上传图像到服务器,现在我想删除图像的任何痕迹。

我一个人在分公司工作

有人能告诉我怎么做吗?

可以用git rebase -i来完成。它将打开一个对话框,您可以在其中更改每个提交并从此提交中删除图像

但是

rebase 的副作用是 SHA-1 会发生变化,如果其他人已经拉出分支,他将无法使用,他将不得不删除分支并再次检查。所以做之前要三思。

如何找到文件被修改的提交?

git log --follow <file_name>  

如何从大量提交中删除文件?

Read this post。它有详细的解释+示例代码,说明如何操作。

最佳实践

将大文件存储在子模块中,这样它们就不会成为您的基本代码的一部分

您可以使用 git filter-branch。 Github 有一个很好的帮助页面解释了从存储库中删除文件的过程。

https://help.github.com/articles/remove-sensitive-data/