^ {}在git中意味着什么?

问题描述 投票:54回答:2

我在git ls-remote命令的末尾偶然发现了两个奇怪的字符,我想知道这意味着什么?

0e4c39557ccb6789173c  refs/tags/2011-11-04
966f8df553f18c486820  refs/tags/2011-11-04^{}

你碰巧知道这个^ {}是什么意思吗?另外,为什么这个git标签似乎重复了?

git
2个回答
50
投票

^{}符号在gitrevisions手册中有解释:

<rev>^{}, e.g. v0.99.8^{} 

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

在这种情况下 - refs/tags/2011-11-04是指向标签对象0e4c39557ccb6789173c的标签。通过执行refs/tags/2011-11-04^{},我们可以将标记取消引用到最终的非标记对象,在这种情况下是-966f8df553f18c486820(提交)。请注意,当应用于非标记对象时,^{}是一个noop。

git show-ref命令可用于查看标签以及最终取消引用的非标签对象:

$ git show-ref --tags
3521017556c5de4159da4615a39fa4d5d2c279b5 refs/tags/v0.99.9c
423325a2d24638ddcc82ce47be5e40be550f4507 refs/tags/v1.0rc4^{}

$ git show-ref --tags --dereference
3521017556c5de4159da4615a39fa4d5d2c279b5 refs/tags/v0.99.9c
6ddc0964034342519a87fe013781abf31c6db6ad refs/tags/v0.99.9c^{}
055e4ae3ae6eb344cbabf2a5256a49ea66040131 refs/tags/v1.0rc4
423325a2d24638ddcc82ce47be5e40be550f4507 refs/tags/v1.0rc4^{}

来自git show-ref手册:

-d 
--dereference 

取消引用标记到对象ID中。它们将显示为附加“^ {}”。


8
投票

请注意,git ls-remote有新的过滤器git 2。8(2016年3月)。

参见commit 99c08d4commit ba5f28bcommit 80b17e5commit 40a8852commit 54813bdThomas Gummerer (tgummerer)(2016年1月18日)。 建议:pedro rijo (pedrorijo91)。 (由Junio C Hamano -- gitster --合并于commit bd6934a,2016年2月3日)

这意味着您只能显示标签

git ls-remote --refs

不要在输出中显示像HEAD这样的去皮标签或伪字符。

© www.soinside.com 2019 - 2024. All rights reserved.