如何在远程存储库中获取提交哈希的git标记?

时间:2017-10-03 02:22:34

标签: git

您可以通过执行以下操作获取指向本地存储库中特定提交的标记:

git tag --points-at <commit-hash>

或者这个:

git describe --exact-match <commit-hash>

这是否也可以用于远程存储库,甚至无需克隆存储库?

1 个答案:

答案 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有四种对象,committagtreeblob

如果v1.0是轻量级代码,则v1.0v1.0^{}是相同的。

如果v1.0是anotated标记,v1.0是标记对象,v1.0^{}是它引用的提交。作为anotated标记,v1.0v1.0^{}对于许多git命令都是相同的,例如git loggit showgit diff,当它们被解析为{ {1}}或commit。在tree中,git log v1.0v1.0。作为commit-ishcommit-ishv1.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^{}是一个提交对象。

相关问题