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

Qua*_*Van 89 git hash logging verbose git-tag

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

tag1
tag2
Run Code Online (Sandbox Code Playgroud)

git tag -n 打印标签的消息

tag1  blah blah
tag2  blah blah
Run Code Online (Sandbox Code Playgroud)

获取tag1和tag2的哈希的最佳方法是什么?

pet*_*mag 121

这个怎么样?

git show-ref --tags
Run Code Online (Sandbox Code Playgroud)

  • 要显示带有解除引用引用的标记列表(如果是带注释的标记),请使用`git show-ref --tags -d`.解除引用的标签后缀为"^ {}". (17认同)
  • 请注意,这不会区分轻量级和带注释的标记.对于轻量级标签,它将显示提交,对于带注释的标签,它将显示标签对象本身的哈希值. (7认同)

ADT*_*DTC 39

git tag命令不发达.需要很多但是缺少它,例如提交历史顺序中的完整标签详细信息和标签.

我喜欢这样,它给出了我想要但却无法得到的东西git tag:

git log --oneline --decorate --tags --no-walk
Run Code Online (Sandbox Code Playgroud)

这样可以按照反向时间顺序给出一个非常漂亮的颜色编码的标签视图(就像在完整的日志中一样).这样,您不仅可以看到标记,还可以看到标记提交的缩写哈希和提交消息.


我有它别名git tgit tags如下:

git config --global alias.tags "log --oneline --decorate --tags --no-walk"
git config --global alias.t "!git tags"
Run Code Online (Sandbox Code Playgroud)

注意:我不得不使用bash重定向,git t因为Git不支持从另一个别名调用别名(这是一个无赖).


如果要查看提交日期和时间,请尝试:

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

您可以在--date选项中使用其他日期格式,也可以完全控制输出以匹配您在--pretty选项中的独特品味.这两个选项都在git-log文档中有详细记录.

  • @SteliosAdamantidis 实际上,我的回答给出了 _abbreviated_ SHA1 散列(前 7 个字符),如果您想要全长散列,您可以随时使用 `--pretty` 和 `%H` 修改它。谢谢你的+1 :) (3认同)
  • 虽然不是OP所要求的(显示提交**sha1哈希**),但它非常有用,因为提交消息也可能很方便.来自我的+1. (2认同)
  • @nealmcb [`git log`功能强大!](https://git-scm.com/docs/git-log)您可以使它显示** _ exactly _ **您想要的内容。尝试`git log --tags --no-walk --date = iso-local --pretty ='%C(auto)%h%cd%d%s'`。其他日期格式也是可能的。只需在帮助页面中查找`--date`。_我已将答案更新为包含此选项。 (2认同)

小智 15

带注释的标签有自己的SHA-1,因此我们需要取消引用它们.但是,轻量级标记不能被解除引用,因为它们已经指向提交.要解决这个问题,我们必须列出并过滤提交对象:

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

轻量级标签的结果:

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
Run Code Online (Sandbox Code Playgroud)

带注释标签的结果:

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^{}
Run Code Online (Sandbox Code Playgroud)


Cas*_*bel 9

要获得任何类型的ref(branch,tag ...)引用的SHA1,请使用git rev-parse:

git rev-parse tag1^0 tag2^0
Run Code Online (Sandbox Code Playgroud)

它将在单独的行上仅打印完整的SHA1.该^0后缀是一个特殊的语法,以确保这将由标签打印提交指出的SHA1来,无论是注释与否.(带注释的标签本身就是对象,它们包含一个指向提交的指针以及元数据.如果你知道一个标签是注释的,并且想要标签的SHA1,那么就干掉吧^0.)

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


Ted*_*Ted 8

我有一个类似的问题,但想要(几个)特定标签的哈希.我发现"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
Run Code Online (Sandbox Code Playgroud)

但是,一些"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
Run Code Online (Sandbox Code Playgroud)

由于我对使用"show"而不是"show-ref"比较熟悉,因此我发现后者更容易记忆,也更有帮助.

另请参阅如何判断标记在Git中指向哪个提交?.