Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从git存储库中完全删除文件?_Git - Fatal编程技术网

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

如何从git存储库中完全删除文件?,git,Git,我最近注意到,我的文本编辑器使用的项目文件(以及一些其他垃圾文件)被添加到项目的git存储库中。由于它们实际上不是项目的一部分,我想删除它们,但是git rm不会从存储库中删除旧版本,而且我找不到任何其他看起来有希望的工具。您需要的工具是git filter branch。描述了其用法,但基本上: $ git filter-branch --tree-filter 'rm -f my_file' HEAD 将从每次提交中删除“我的文件” 请注意,这会重写每个提交,因此如果您将其推入远程存储库,

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

您需要的工具是
git filter branch
。描述了其用法,但基本上:

$ git filter-branch --tree-filter 'rm -f my_file' HEAD
将从每次提交中删除“我的文件”


请注意,这会重写每个提交,因此如果您将其推入远程存储库,您必须(a)强制更新,以及(b)从您处提取的所有其他人现在都将有重复的提交(因为您重写了历史记录),如上所述。

这就是
git筛选器分支的用途,但请注意,您的回购历史记录将发生变化,并且在重写历史记录后,提交哈希将不同

如果您还想释放空间,我建议您使用
git-forget-blob
,因为仅
git-filter-branch
不会使git忘记您的文件,因为它仍然可能被远程设备、reflog、标记等引用

git忘记blob main.c.swp


您可以获得更多信息

部分重复,前面的问题肯定会涉及到这一点:我建议添加
--prune empty
,这样也会删除结果中生成的任何空提交。对于不同目录中有许多同名文件的存储库,这是如何工作的?它会删除所有同名的文件吗?@CodeMonkey:在这种情况下,您会使用更长、唯一的路径。以后我应该执行
git push--force
@mipadi@mipadi,如果我很久以前在本地删除了这些文件呢?(并提交和推送这些删除)在这种情况下,如何从存储库中删除文件?