从Git中删除神秘的引用

时间:2015-01-24 21:59:13

标签: git garbage-collection git-filter-branch

filter-branch和prune / gc之后,仍有一些不受欢迎的提交。

他们不在我关心的树枝上;必须有一些标签或东西固定在它们上面。

我正在试图找出它是什么,然后删除它。

但我尝试的任何东西似乎都无效。

$ git name-rev 1bdac1e1ad7ec61a4b05d3f91eb39bde61a4da1f #what's holding on?
1bdac1e1ad7ec61a4b05d3f91eb39bde61a4da1f original/refs/tags/1.0-rc80~1320^2~8^2~1
$ git rm -r refs/original
$ git name-rev 1bdac1e1ad7ec61a4b05d3f91eb39bde61a4da1f
1bdac1e1ad7ec61a4b05d3f91eb39bde61a4da1f original/refs/tags/1.0-rc80~1320^2~8^2~1
$ git update-ref -d original/refs/tags/1.0-rc80
$ git name-rev 1bdac1e1ad7ec61a4b05d3f91eb39bde61a4da1f
1bdac1e1ad7ec61a4b05d3f91eb39bde61a4da1f original/refs/tags/1.0-rc80~1320^2~8^2~1

(这是一个简单的回购。)

如何移除original/refs/tags/1.0-rc80,无论是什么?

1 个答案:

答案 0 :(得分:5)

全名为refs/original/refs/tags/1.0-rc80,它位于refs/original名称空间中。你非常接近这个命令:

git update-ref -d original/refs/tags/1.0-rc80

除了update-ref要求您拼出全名refs/original/refs/tags/1.0-rc80

您可能有一些额外的refs/original/*名称,因为git filter-branch会在更改之前复制任何引用名称。您可以通过以下方式查看它们:

git for-each-ref refs/original

(您甚至可以使用for-each-ref生成删除它们的命令,或者您可以rm -rf .git/refs/original直接编辑.git/packed-refs,但for-each-ref方法更有可能如果/当裁判包装不同或者其他什么时,你可以在将来工作,另外你提到这是一个裸露的回购,所以他们不在.git这里......)。