436

我希望 git 列出所有标签以及完整的注释或提交消息。这样的事情很接近:

git tag -n5

这正是我想要的,除了它只会显示标签消息的前 5 行。

我想我可以使用一个非常大的数字。我可以在这里使用的最高数字是多少?每台电脑都一样吗?

更新:我有很多时间考虑这个问题,现在我认为如果其中一些非常长,我不一定要显示每条消息的全部内容。我真的没有任何特殊的需要需要我看到大量的消息(除了我自己倾向于在我写的所有内容中冗长,包括标签消息)。我只是不喜欢它不一定会向我展示整个信息的想法,因为这让我觉得它在向我隐藏信息。但是太多的信息也可能是一件坏事。

4

9 回答 9

417

试试这个,它将列出所有标签以及每个标签的注释和 9 行消息:

git tag -n9

也可以使用

git tag -l -n9

如果要列出特定标签:

git tag -l -n9 v3.*

(例如,上面的命令将只显示以“v3”开头的标签。)

-l , --list 列出名称与给定模式匹配的标签(如果没有给出模式,则全部列出)。不带参数运行“git tag”也会列出所有标签。该模式是一个shell 通配符(即,使用fnmatch(3) 匹配)。可以给出多种模式;如果其中任何一个匹配,则显示标签。

于 2012-12-31T13:40:54.177 回答
151
git tag -n99

短而甜。这将列出来自每个标签注释/提交消息的多达 99 行。这是 git tag 官方文档的链接

我现在认为每个标签最多只能显示 99 行的限制实际上是一件好事,因为大多数时候,如果一个标签真的超过 99 行,你就不会真的想看到所有其余的台词你会吗?如果您确实希望看到每个标签的行数超过 99 行,则始终可以将其增加到更大的数字。

我的意思是,我想可能有特定的情况或原因希望看到大量的标签消息,但是在什么时候你不想看到整个消息?当它有超过 999 行时?10,000?1,000,000?我的观点是,通常对您将看到的行数设置一个上限是有意义的,并且这个数字允许您设置它。

由于我正在为您在查看标签时通常希望看到的内容进行论证,因此将这样的内容设置为别名可能是有意义的(来自 Iulian Onofrei 下面的评论):

git config --global alias.tags 'tag -n99'

我的意思是,你真的不想在git tag -n99每次只想看到你的标签时都输入,对吗?一旦配置了别名,只要您想查看标签,您只需git tags在终端中输入即可。就个人而言,我更喜欢比这更进一步,为我所有常用的命令创建更缩写的 bash 别名。为此,您可以在 .bashrc 文件中添加类似这样的内容(适用于 Linux 和类似环境):

alias gtag='git tag -n99'

然后,每当您想查看标签时,只需键入gtag. 使用别名路径(git 别名或 bash 别名或其他)的另一个优点是您现在已经有了一个位置,您可以在其中添加进一步的自定义设置,通常希望您的标签显示给您(例如排序它们以某些方式,如我在下面的评论等)。一旦您克服了创建第一个别名的麻烦,您现在将意识到为您喜欢以自定义方式工作的其他事情创建更多别名是多么容易git log,但让我们将其保存为不同的问题/答案.

于 2014-10-14T17:33:14.453 回答
27

Mark Longair 的答案(使用git show)接近问题中的预期。但是,它还包括标记指向的提交,以及该提交的完整补丁。由于提交可能与标签无关(它只是标签试图捕获的一个提交),这可能是不可取的。我相信以下内容会更好一些:

for t in `git tag -l`; do git cat-file -p `git rev-parse $t`; done
于 2013-01-07T21:35:38.870 回答
14

它远非漂亮,但您可以创建一个脚本或别名来执行以下操作:

for c in $(git for-each-ref refs/tags/ --format='%(refname)'); do echo $c; git show --quiet "$c"; echo; done
于 2011-03-18T22:58:22.280 回答
13

使用 --format 选项

git tag -l --format='%(tag) %(subject)'
于 2019-12-16T11:48:09.167 回答
11

仅最后一个标签消息:

git cat-file -p $(git rev-parse $(git tag -l | tail -n1)) | tail -n +6
于 2014-10-01T01:11:35.987 回答
5
git tag -l --format='%(contents)'

或者

git for-each-ref refs/tags/ --format='%(contents)'

将为每个标签输出完整的注释消息(如果已签名,则包括签名)。

  • %(contents:subject)将只输出第一行
  • %(contents:body)将输出没有第一行和签名的注释(仅有用的文本)
  • %(contents:signature)将仅输出 PGP 签名

man git-for-each-ref在“字段名称”部分中查看更多信息。

于 2020-08-25T17:01:48.187 回答
2

我更喜欢在命令行上执行此操作,但如果您不介意 Web 界面并且使用 GitHub,则可以访问https://github.com/user/repo/tags并单击每个标签旁边的“...”以显示其注释。

于 2013-09-26T13:22:58.613 回答
2

“git tag -n” 朱先生为这个答案做出了贡献。

于 2021-05-11T07:49:20.360 回答