8

以'^{}'结尾的标签是什么?它们实际上并不存在于裸存储库中。

$ git ls-remote -t origin
55f09717db93733b8f151763e7e28628f3f22129        refs/tags/Init
dce13158fff0e95b8adcc5628f193a8c03bada9c        refs/tags/Init^{}
2c9f64c306aa76e5b689bc2ffb41163aa255ac40        refs/tags/kaos-red
0970feca84d87df60ec5e943da2f55f1947fd0a3        refs/tags/legacy
dce13158fff0e95b8adcc5628f193a8c03bada9c        refs/tags/legacy^{}

例如,当我尝试使用“git push :legacy^{}”删除它们时,git 会响应

fatal: remote part of refspec is not a valid name in :Init^{}

那么他们来自哪里呢?它是 ls-remote 中的错误吗?

4

2 回答 2

7

git rev-parse 手册描述了您可以在git 中指定提交或其他对象的各种方法。对于这种情况,它说:

^{},例如 v0.99.8^{} 后缀 ^ 后跟一个空括号对意味着对象可以是一个标签,并递归地取消引用该标签,直到找到一个非标签对象。

于 2013-02-05T16:30:58.927 回答
2

我想在我的远程 git 存储库中批量删除标签,在我从谷歌找到的一些结果文档中,我找到了类似的命令

git ls-remote --tag | awk '/(.*)(\s+)(.*)/ {print ":" $2}' | xargs git push origin 

或类似的东西。(同样的问题,它会显示以 ^{} 结尾的幻像标签)

如果你想做和我一样的事情,可以尝试使用 git 命令 show-ref

git show-ref --tag | awk '/(.*)(\s+)(.*)/ {print ":" $2}' | xargs git push origin

后一种方式,你不会被这个问题所阻碍。

于 2015-06-25T07:54:07.097 回答