ls-remote报告以“^ {}”结尾的幻像标签

时间:2013-02-05 16:06:42

标签: git

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

$ 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中的错误吗?

2 个答案:

答案 0 :(得分:7)

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

  

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

答案 1 :(得分:2)

我想批量删除我的远程git存储库中的标签,在我从Google找到的一些结果文档中,我找到了像

这样的命令
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

在后一种方式中,您不会被此问题阻止。