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

时间:2015-05-20 09:47:43

标签: git git-commit

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

new file: image.png 

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

我自己也在努力工作。

有人能告诉我怎么做吗?

2 个答案:

答案 0 :(得分:4)

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

BUT

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

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

git log --follow <file_name>  

如何从很多提交中删除文件?

Read this post。它有一个详细的解释和示例代码,如何做到这一点。

最佳实践

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

答案 1 :(得分:0)

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

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