如何从git存储库中完全删除文件?

时间:2010-08-11 13:21:15

标签: git

我最近注意到我的文本编辑器使用的项目文件(以及其他一些垃圾)都添加了项目的git存储库。由于它们实际上不是项目的一部分,我想删除它们,但git rm不会从存储库中删除旧版本,我找不到任何看起来很有希望的东西。

2 个答案:

答案 0 :(得分:125)

您想要的工具是git filter-branch。它的用法描述为here,但基本上是:

$ git filter-branch --tree-filter 'rm -f my_file' HEAD

将从每次提交中删除“my_file”。

请注意,这会重写每次提交,所以如果你进入远程存储库,你必须(a)强制更新,(b)从你那里撤走的其他人现在都会有重复的提交(因为你重写了历史记录) ),如git rebase man page所述。

答案 1 :(得分:10)

这是git filter-branch的用途,但请注意您的回购历史记录会更改,并且在重写历史记录后提交哈希值会有所不同。

如果您还想释放空间,我建议您使用git forget-blob,因为git filter-branch单独不会让git忘记您的文件,因为它可能仍会被遥控器,reflog,标签引用等等。

git forget-blob main.c.swp

您可以获得更多信息here