从Git中删除神秘的引用

Pau*_*per 3 git garbage-collection git-filter-branch

在a 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
Run Code Online (Sandbox Code Playgroud)

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

我怎么删除original/refs/tags/1.0-rc80,不管是什么?

tor*_*rek 5

全名是refs/original/refs/tags/1.0-rc80,它存在于refs/original名称空间中.你非常接近这个命令:

git update-ref -d original/refs/tags/1.0-rc80
Run Code Online (Sandbox Code Playgroud)

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

您可能有一些额外的refs/original/*名称,因为git filter-branch在更改之前复制任何引用名称.你可以看到它们全部:

git for-each-ref refs/original
Run Code Online (Sandbox Code Playgroud)

(你甚至可以使用它for-each-ref来生成删除它们的命令,或者你可以直接rm -rf .git/refs/original编辑.git/packed-refs,但是for-each-ref如果/当refs以不同的方式打包或者某些东西时,该方法更有可能在将来工作,而且你提到这是一个裸的回购所以他们不在.git这里......).