如何列出所有标签连同完整的消息在git?

我想要git列出所有标签连同完整的注释或提交消息。类似这样的事情很接近:

git tag -n5

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

我想我可以用一个很大的数。这里最大的数是多少?每台电脑都一样吗?

更新:我已经花了很多时间来思考这个问题,现在我想我不一定要显示每条消息的完整内容,如果其中一些消息特别长的话。我并没有什么特别的需要去看大量的消息(除了我自己倾向于在我所写的所有内容中冗长冗长之外,包括标签消息)。我只是不喜欢它不一定会向我显示整个信息的想法,因为这让我觉得它在向我隐藏信息。但过多的信息也可能是件坏事。

187721 次浏览

它远非漂亮,但你可以创建一个脚本或别名,这样做:

for c in $(git for-each-ref refs/tags/ --format='%(refname)'); do echo $c; git show --quiet "$c"; echo; done

尝试一下,它会列出所有的标签和注释&每个标签有9行信息:

git tag -n9

也可以用

git tag -l -n9

如果要列出特定的标签:

git tag -l -n9 v3.*

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

-l,——list 列出与给定模式匹配的名称的标签(如果没有给出模式,则全部匹配)。 运行不带参数的"git tag"也会列出所有标签。模式是一个shell通配符 (即使用fnmatch(3)进行匹配)。可以给出多个模式;如果有的话

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

for t in `git tag -l`; do git cat-file -p `git rev-parse $t`; done

我更喜欢在命令行上做这件事,但如果你不介意一个web界面,你使用GitHub,你可以访问https://github.com/user/repo/tags,然后点击每个标签旁边的“…”来显示它的注释。

仅限最后标签信息:

git cat-file -p $(git rev-parse $(git tag -l | tail -n1)) | tail -n +6
git tag -n99

又短又甜。这将从每个标记注释/提交消息中列出最多99行。这里是git标签官方文档的链接

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

我的意思是,我猜可能有一个特定的情况或原因想要看到大量的标签消息,但在什么情况下你想要看到整个消息?当它有超过999行?10000年?1000000年?我的观点是,对你能看到的行数设置一个上限通常是有意义的,这个数字允许你设置它。

因为我正在为你在查看标签时通常想要看到的内容做一个论证,所以将这样的东西设置为别名可能是有意义的(来自下面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,但让我们把这个留给另一个问题/答案。

使用——format选项

git tag -l --format='%(tag) %(subject)'
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“字段名”部分

怎么样"git tag -n"

.

.