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

Dav*_*d X 73 git

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

mip*_*adi 133

你想要的工具是git filter-branch.它的用法在这里描述,但基本上:

$ git filter-branch --tree-filter 'rm -f my_file' HEAD
Run Code Online (Sandbox Code Playgroud)

将从每次提交中删除"my_file" .

请注意,这会重写每次提交,因此如果您进入远程存储库,则必须(a)强制进行更新,并且(b)从您那里撤出的所有其他人现在都会有重复的提交(因为您重写了历史记录),在git rebase手册页上描述.

  • 我建议添加`--prune-empty`,这样任何生成的空提交也将被删除. (19认同)
  • @CodeMonkey:在这种情况下,您将使用更长,更独特的路径. (2认同)

nac*_*ker 10

这是git filter-branch为了什么,但要注意你的repo历史将改变,并且在重写历史记录后提交哈希值会有所不同.

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

git forget-blob main.c.swp

您可以在此处获取更多信息