Git标签列表,显示提交sha1哈希值

所以git tag命令列出了当前的git标签

 tag1 tag2 

git tag -n打印标签的消息

 tag1 blah blah tag2 blah blah 

获取tag1&tag2的散列的最佳方法是什么?

这个怎么样?

 git show-ref --tags 

git tag命令是欠发达的。 很多是需要的,但缺less它,如提交历史顺序中的完整标签细节和标签。

我喜欢这个,它给出了我想要的,但不能从git tag

 git log --oneline --decorate --tags --no-walk 

这给出了一个非常好的颜色编码视图的反向时间顺序标签(因为它会在完整的日志)。 这样,您不仅可以看到标签,还可以看到标签提交的缩写哈希和提交消息。


我有别名来git tgit tags ,如下所示:

 git config --global alias.tags "log --oneline --decorate --tags --no-walk" git config --global alias.t "!git tags" 

注意:我必须使用bashredirect作为git t因为Git不支持从另一个别名(这是一个无赖)调用一个别名。


如果您想查看提交date和时间,请尝试:

 git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s' 

您可以在--date选项中使用其他date格式,并完全控制输出以匹配您在--pretty选项中的独特趣味。 这两个选项在git-log文档中都有详细logging 。

带注释的标签有自己的SHA-1,所以我们需要对它们进行解引用。 但是轻量级标签不能被解除引用,因为它们已经指向提交。 为了解决,我们必须列出并筛选提交对象:

 git for-each-ref --sort -v:refname --format '%(objectname) %(objecttype) %(refname) %(*objectname) %(*objecttype) %(*refname)' refs/tags | grep commit 

结果与轻量级标签:

 589610a0114a375f1bff716dd308cf8df08571d3 commit refs/tags/1.4.9 e25952a74bf379783944bef9c4fcc60600cb764c commit refs/tags/1.4.8 19b1c2c96a9678837f57eac86cf3d22842731510 commit refs/tags/1.4.7 7208212a55c4a56af34da781a7f730d6ddd557a1 commit refs/tags/1.4.6 62ec20337a4125496bd4f56288f3283963153194 commit refs/tags/1.4.5 

带有注释标签的结果:

 e2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 commit refs/tags/v2.11.0-rc3^{} 1310affe024fba407bff55dbe65cd6d670c8a32d commit refs/tags/v2.11.0-rc2^{} 3ab228137f980ff72dbdf5064a877d07bec76df9 commit refs/tags/v2.11.0-rc1^{} 1fe8f2cf461179c41f64efbd1dc0a9fb3b7a0fb1 commit refs/tags/v2.11.0-rc0^{} 454cb6bd52a4de614a3633e4f547af03d5c3b640 commit refs/tags/v2.11.0^{} 

我有一个类似的问题,但想要(几个)特定标签的散列。 我发现“show-ref”将会有一个标签列表,所以这个工作就是:

 % git show-ref v3.4.0.13-ga v3.4.0.13-base bfc7747c4cf67a4aacc71d7a40337d2c3f73a886 refs/tags/v3.4.0.13-base 79ba365e75a4f9cee074d25a605a26acb660b7de refs/tags/v3.4.0.13-ga 

但是,一些“git show”的实验导致了这个命令:

 % git show --summary --oneline --decorate v3.4.0.13-ga v3.4.0.13-base 79ba365 (tag: v3.4.0.13-ga, rhins013a) commit message the first bfc7747 (tag: v3.4.0.13-base) commit message the second 

由于我比“show-ref”更加熟悉“show”,我发现后者更容易记忆,也更有帮助。

另请参阅如何判断标记指向Git中的哪些提交? 。

要获取任何types的引用(分支,标签…)所引用的SHA1使用git rev-parse

 git rev-parse tag1^0 tag2^0 

它将只在单独的行上打印完整的SHA1。 ^0后缀是一种特殊的语法,以确保这将打印标记指向的提交的SHA1,不pipe它是否被注释。 (带注释的标签本身就是对象,包含一个指向一个提交以及元数据的指针。如果你知道一个标签被注释了,并且想要标签的SHA1,那么只需要把^0去掉。

当然,你不应该经常这样做,因为任何接受SHA1的Git命令也应该接受一个标签!

标签必须签名和/或消息。 轻量级标签没有SHA1对象,只是参考。 否则请尝试git show

 git show-ref [object] 

对象可以是commit / tag / tree / blob,

在你的情况只是:

 git show-ref [tag_name]