如何在远程仓库中获取一个提交哈希值对应的Git标签?

4
通过以下方式,您可以获取指向本地存储库中特定提交的标签:
git tag --points-at <commit-hash>

或者这样:
git describe --exact-match <commit-hash>

这是否也适用于远程代码库,而无需克隆代码库?
1个回答

7
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有四种对象类型:committagtreeblob。如果v1.0是轻量级标签,则v1.0v1.0^{}是相同的。如果v1.0是注释标签,则v1.0是一个标签对象,而v1.0^{}是它所引用的提交。对于许多Git命令(例如git loggit showgit diff等),作为注释标签时,v1.0v1.0^{}都可以解析为committree,因此它们在这些情况下是相同的。在git log v1.0中,v1.0commit-ish。作为commit-ishv1.0v1.0^{}都指向相同的提交。但是,对于其他Git命令(如git rev-parse),它们是不同的。在git rev-parse -t v1.0中,v1.0是标签对象。而在git rev-parse -t v1.0^{}中,v1.0^{}是提交对象。


1
谢谢。但是,我必须以某种方式解析结果。有没有办法只获取标签名称,就像我们使用 {git tag --points-at <commit-hash>} 一样。另外,v1.0 和 v1.1^{} 之间有什么区别? - Sahil Lakhwani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接