以'^ {}'结尾的标签是什么?它们实际上并不存在于裸存储库中。
$ 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中的错误吗?
答案 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
在后一种方式中,您不会被此问题阻止。