如何从 Git 存储库中删除 blob

10

我无意中将一个大小超过1GB的数据库转储文件添加到了我的代码库(repository)中,然后对其进行了推送(push),但几天后才注意到这个问题。

我使用了git filter-branch命令删除了该文件,过期的引用(reflog)并运行git gc指令以清除未使用的对象,但是该数据库转储文件blob仍然存在于代码库中。 我使用了 Which commit has this blob?命令,但我没有找到任何一个与该blob有关的提交(commit)。 那么如何删除它或者找出为什么在git gc清除时它没有被删除呢?


1
这个链接https://dev59.com/53I95IYBdhLWcg3w3h_G#2116892有用吗?或者这个链接https://dev59.com/nXNA5IYBdhLWcg3wQ7i4? - VonC
关于“did find any commit”:你的意思是指“没有找到任何提交”(相反的意思)吗? - Peter Mortensen
2个回答

15

运行git gc命令时,你具体调用了哪个命令?

请注意git gc的手册:

可选的配置变量gc.pruneExpire控制未引用松散对象被修剪之前其存在多长时间。默认值为“2周前”

因此,如果你的blob比14天还年���,你必须调用以下命令:

git gc --prune=<date> (for date you also can insert now)

谢谢,我没有注意到pruneExpire选项,并不知道git会保留一段时间未被引用的对象。以前,我运行了git gc --prune --aggressive。现在,我在运行git gc --prune之前运行了git reflog --all --expire=now,它删除了blob。 - Maciej Lotkowski

1

只需执行rm .git/objects/path/to/blob

我不确定为什么git-gc没有删除它。


12
在进行踩票操作时,请大家解释一下原因。这有助于所有阅读该主题的人了解为什么某些内容不太受欢迎或者完全错误。 :) - Rob Evans
为什么删除这个内部Git数据结构是安全的? - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接