我制作了两个本地代码1.0.0.1308
和1.0.1.1308
:
$ git show-ref
2cc0513083619934459832c175b433ee1ecfedf9 refs/heads/master
2cc0513083619934459832c175b433ee1ecfedf9 refs/remotes/origin/HEAD
2cc0513083619934459832c175b433ee1ecfedf9 refs/remotes/origin/master
8ba818dae2fd892b44df64e4a5ee9e07d4e682fb refs/tags/1.0.0.1308
dc4ea0fb4899ea6fffc47e203923a980c0de7d98 refs/tags/1.0.1.1308
当我git push --tags
我登上遥控器时:
$ git ls-remote
2cc0513083619934459832c175b433ee1ecfedf9 HEAD
2cc0513083619934459832c175b433ee1ecfedf9 refs/heads/master
8ba818dae2fd892b44df64e4a5ee9e07d4e682fb refs/tags/1.0.0.1308
6df34f6333097b77d8d6bb907155807b1e1cb19b refs/tags/1.0.0.1308^{}
dc4ea0fb4899ea6fffc47e203923a980c0de7d98 refs/tags/1.0.1.1308
2cc0513083619934459832c175b433ee1ecfedf9 refs/tags/1.0.1.1308^{}
为什么创建了1.0.0.1308^{}
和1.0.1.1308^{}
?
P.S。:我刚刚尝试删除遥控器上的标签(git push origin :tagname
),它也删除了^{}
的标签。
答案 0 :(得分:3)
tagname^{}
语法表示“标记指向的对象”。请参阅man git-rev-parse。
带注释的标签由一个标签对象(包含标签消息和其他数据)组成,它引用另一个对象(实际标记的对象)。行refs/tags/1.0.1.1308
表示标记对象的标识为dc4ea0f
。
然后refs/tags/1.0.1.1308^{}
行告诉谁想要知道标记1.0.1.1308
指向对象2cc0513
,这可能是一个提交(尽管可以标记提交以外的东西)。
也就是说,当您标记对象2cc0513
时,您创建了一个标识为dc4ea0f
的标记。