您可以通过执行以下操作获取指向本地存储库中特定提交的标记:
git tag --points-at <commit-hash>
或者这个:
git describe --exact-match <commit-hash>
这是否也可以用于远程存储库,甚至无需克隆存储库?
答案 0 :(得分:2)
git ls-remote -t <remote> | grep <commit-hash>
git ls-remote
列出远程存储库中的所有引用及其sha1值。 -t
仅对标记进行限制。如果您位于本地git存储库下,并且远程服务器为origin
,则可以省略<remote>
。如果您指定<remote>
之类的https://github.com/foo/bar.git
,则可以在任何位置运行该命令。如果命令中存在-t
,<remote>
必须在<remote>
之前。请参阅git-ls-remote。
<强>更新强>
不,--points-at
没有类似git ls-remote
的内容。如果您知道标记名称,git ls-remote <remote> <tag_name>
将返回sha和标记,但不能从sha到标记名称。
有两种类型的标签。一个是轻量级标签,另一个是带注释的标签。 formmer只是一个ref,后者是一个git对象。 Git有四种对象,commit
,tag
,tree
和blob
。
如果v1.0
是轻量级代码,则v1.0
和v1.0^{}
是相同的。
如果v1.0
是anotated标记,v1.0
是标记对象,v1.0^{}
是它引用的提交。作为anotated标记,v1.0
和v1.0^{}
对于许多git命令都是相同的,例如git log
,git show
,git diff
,当它们被解析为{ {1}}或commit
。在tree
中,git log v1.0
是v1.0
。作为commit-ish
,commit-ish
和v1.0
引用相同的提交。因此,我们从v1.0^{}
和git log v1.0
获得相同的输出。对于像git log v1.0^{}
这样的其他git命令,它们是不同的。在git rev-parse
中,git rev-parse -t v1.0
是标记对象。在v1.0
中,git rev-parse -t v1.0^{}
是一个提交对象。