通过以下方式,您可以获取指向本地存储库中特定提交的标签:
或者这样:
这是否也适用于远程代码库,而无需克隆代码库?
git tag --points-at <commit-hash>
或者这样:
git describe --exact-match <commit-hash>
这是否也适用于远程代码库,而无需克隆代码库?
git tag --points-at <commit-hash>
git describe --exact-match <commit-hash>
git ls-remote -t <remote> | grep <commit-hash>
git ls-remote
会列出远程存储库中所有的引用和它们的sha1值。使用-t
只限制标签。如果您在本地Git存储库下,而且远程是origin
,则可以省略<remote>
。如果您指定了<remote>
,例如https://github.com/foo/bar.git
,则可以在任何地方运行该命令。如果命令中存在<remote>
,则-t
必须在其之前。更多信息请参见git-ls-remote。
更新:
不,git ls-remote
没有像--points-at
这样的选项。如果知道标签名称,则git ls-remote <remote> <tag_name>
将返回SHA和标签名称,但不能从SHA到标签名称。有两种类型的标签:一种是轻量级标签,另一种是注释标签。前者只是一个引用,而后者是一个Git对象。Git有四种对象类型:commit
,tag
,tree
和blob
。如果v1.0
是轻量级标签,则v1.0
和v1.0^{}
是相同的。如果v1.0
是注释标签,则v1.0
是一个标签对象,而v1.0^{}
是它所引用的提交。对于许多Git命令(例如git log
,git show
,git diff
等),作为注释标签时,v1.0
和v1.0^{}
都可以解析为commit
或tree
,因此它们在这些情况下是相同的。在git log v1.0
中,v1.0
是commit-ish
。作为commit-ish
,v1.0
和v1.0^{}
都指向相同的提交。但是,对于其他Git命令(如git rev-parse
),它们是不同的。在git rev-parse -t v1.0
中,v1.0
是标签对象。而在git rev-parse -t v1.0^{}
中,v1.0^{}
是提交对象。