[英]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.