2012-01-09 83 views

回答

90

这个怎么样?

git show-ref --tags 
+5

注意,这不会区分轻量级和带注释的标签。对于轻量级标签,它将显示提交,并为注释标签显示标签对象本身的散列。 – 2012-01-09 23:43:35

+12

使用'git show-ref --tags -d'来显示具有解除引用的引用的标签列表(在标注了标签的情况下)。解除引用的标签后缀为'^ {}'。 – 2012-11-10 19:30:49

3

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

+1

'git show tag1' 'git show tag2'最适合我,谢谢:) – 2012-01-10 12:37:08

7

要获取任何种类的参考所指的SHA1(分支,标签...)使用git rev-parse

git rev-parse tag1^0 tag2^0 

它将只打印完整SHA1s,在不同的行。 ^0后缀是一种特殊的语法,用于确保这将打印由标记指向的提交的SHA1,而不管它是否被注释。 (注释标签本身就是对象,它包含指向提交以及元数据的指针,如果您确实知道标签已注释,并且希望标签的SHA1,则只需要将^0关闭。)

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

+0

这里最好的答案,谢谢@Jefromi。请注意,在Windows cmd shell中,任何使用^的git命令都需要引用:例如, git rev-parse“tag1^0”“tag2^0”。 – yoyo 2014-05-02 16:44:09

8

我有一个类似的问题,但想要(几个)特定标签的散列。我发现,“秀-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 --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”,我发现后者更容易记忆,也更有用。

另请参阅How to tell which commit a tag points to in Git?中的精彩总结。

10

带注释的标签有自己的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^{} 
+0

使用'git log --tags --oneline --no-walk'也会自动使用带注释的标签。 :) – ADTC 2017-11-12 21:07:17

21

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

我喜欢这个代替,这给了我想要的东西,但不能从git tag得到:

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

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

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

注:我不得不使用bash重定向git t的混帐不支持调用的


我有如下其化名为git tgit tags别名来自另一个别名(这是一个无赖)。


如果你想看到的提交日期和时间,尝试:

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

可以在​​选择使用其他日期格式,以及完全控制输出以满足您的独特品味在--pretty选项。这两个选项在git-log Documentation中都有详细记录。

+0

似乎是一个非常有用的答案。谢谢。 – Ceki 2017-03-22 20:57:10

+2

虽然不是OP所要求的(显示提交** sha1哈希**),但它非常有用,因为提交消息也可能非常方便。从我+1。 – 2017-04-14 13:28:28

+0

巧妙,thx! – 2017-07-09 12:36:17

-2
git show-ref [object] 

对象可以是提交/标签/树/一滴,

你的情况

刚:

git show-ref [tag_name] 
0
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags 

这给所有提交的标签列表。带注释的标签被取消引用。发送感谢here