繁体   English   中英

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

[英]How can I completely remove a file from a git repository?

我最近注意到,我的文本编辑器使用的项目文件(以及其他一些垃圾文件)已添加到该项目的 git 存储库中。 因为它们实际上不是项目的一部分,所以我想删除它们,但是git rm并没有从存储库中删除旧版本,而且我找不到其他看起来很有希望的东西。

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

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

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

请注意,这会重写每个提交,因此如果您推送到远程存储库,则必须 (a) 强制更新,并且 (b) 从您那里提取的所有其他人现在都将有重复提交(因为您重写了历史记录),如在git rebase手册页中描述。

这就是git filter-branch的用途,但要注意你的 repo 历史会改变,并且在历史重写后提交哈希会有所不同。

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

git forget-blob main.c.swp

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

现在建议改用git-filter-repo 运行git-filter-branch实际上打印:

WARNING: git-filter-branch has a glut of gotchas generating mangled history

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM