列出git标签名称,日期和消息

时间:2012-08-31 16:57:46

标签: git git-log git-tag

如何列出所有标签的标签名称,标签日期和标签消息?

git通过git log提交的显示逻辑与git tag提交的标签分离,似乎很难列出标签名称,标签的日期和标签信息。

我可以使用git log --tags --show-notes --simplify-by-decoration --pretty="format:%ai %d %s"

显示标记日期,名称和提交消息

我检查了http://opensource.apple.com/source/Git/Git-26/src/git-htmldocs/pretty-formats.txt,但没有看到任何显示标记消息的选项。

我可以使用git tag -n5显示标记名称和5行标记消息

但要获得所有三条信息似乎需要超出我能力的粗略脚本。

8 个答案:

答案 0 :(得分:25)

您想使用for-each-ref命令。不幸的是,与filter-branch

相比,用户友好性稍差

请注意,标记日期和标记器等信息仅适用于带注释的标记。

以下是基本原型。请注意,format =可以是它自己的整个shell脚本,可能应该取决于您想要输出的复杂程度。他们有几个专门针对标签in the for-each-ref documentation

的示例
git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags

答案 1 :(得分:5)

git show --tags至少会输出有关您的代码的所有相关信息。您可以从那里找到合适的--pretty=format:序列。

答案 2 :(得分:1)

我不知道是否有办法

  

仅列出 所有标签的标签名称,标签日期和标签消息   仅使用git语法

但是一个简单的grep将完成这项工作:

git show --tags |grep "^tag " -A4

注意我在匹配后指定了4行尾随上下文,因为标准输出在单独的行中显示标记名称,标记日期和标记消息。

如果您需要处理多行标记消息,我更喜欢使用管道来解决awk问题,这会更麻烦:

git show --tags |awk "/^tag /,/-----BEGIN PGP SIGNATURE-----|commit /" |egrep -v "^$" |sed -E "s/^-----BEGIN PGP SIGNATURE-----.*|^commit.*/-/"

只要标记消息后跟PGP SIGNATURE或提交消息,这将是有效的,这些都是可能的情况。但是,您可以轻松地调整最后一个grep以涵盖其他情况(如果有)。

答案 3 :(得分:1)

彩色格式好一点吗?

# ~/.gitconfig
[alias]
tags="for-each-ref --sort=taggerdate --format=%(color:green)%(subject)%(color:reset), tagged: %(refname:short)\n%(taggerdate)\n%(taggername) %(taggeremail)\n\n%(contents:body)\n' refs/tags"

$ git tags 

Release 1.0.1, tagged: 1.0.1
Wed Jul 4 20:16:05 2018 +0430
Sepehr Lajevardi <sepehr.lajevardi@...>

Changelog
- Implement Contentful webhooks to purge internal and CF caches.
- Implement CloudFlareService.
- Fix Contentful's mapping concern usage/namespace. #73
- Temporarily enforce https in og:url property. #103
- Fix entry callback issue with Contentful client. #99
- Fix issue with PPM docker build. #96

Release 1.1.2, tagged: 1.1.2
Thu Jul 12 21:26:29 2018 +0430
Sepehr Lajevardi <sepehr.lajevardi@...>

Changelog
- Fix GA share event issue with AddThis. #132
- Optimize OpenGraph protocol tags for articles. #130
- Optimize Twitter card tags. #131
- Fix HTML validation errors as much as possible. #127


Release 1.1.3, tagged: 1.1.3
Mon Jul 16 22:49:05 2018 +0430
Sepehr Lajevardi <sepehr.lajevardi@...>

Changelog
- Implement cross-device/browser fav/home icons. #137, #138
- Minify HTML output of all pages. #139
- Check for lighthouse score in build pipeline. #30
- Drop AddThis in favor of in-house ShareBar. #116
- Minor article OG tag adjustments.

答案 4 :(得分:1)

git tag --format="%(refname:short) %(authordate) %(authorname) %(subject)"

示例输出

0.4.0 2016年11月2日星期三11:17:50 -0400明显的队长发布:0.4.0

格式字段与git-for-each-ref相同。

答案 5 :(得分:0)

如果要获取最新的标签详细信息,请使用--sort标志,请记住,如果要对日期进行排序,请在日期前使用“-”,以首先列出最新的标签。

例如,我想要最新的标签描述(因为它恰好是最新的发行名称),所以我使用--format来提取标签的主题并对其进行明智的排序(最新的优先)。这是命令。

git for-each-ref --sort=-taggerdate --format '%(subject)' refs/tags --count=1

答案 6 :(得分:0)

在存储库中使用此终端命令

git show --tags --no-patch

您可以使用与--format=相同的git log名称选项(单行,短,中,完整,自定义)来控制格式。

git show --tags --no-patch --format=short

答案 7 :(得分:-1)

这是Andrew's响应的后续问题,略有不同但相关的主题。

git for-each-ref --format="%(refname:short) %(taggerdate) %(subject) %(body)" refs/tags

这在直接命令行上很有用。当我在〜/ .gitconfig中设置git别名时,它似乎没有显示相同的输出。

直接在命令行调用时,我得到了。

package-release-14.7.2 Wed Dec 3 14:24:38 2014 -0800 14.7.2:copy for tag package-release-14.7.2
package-release-14.7.3 Thu Dec 4 14:14:55 2014 -0800 14.7.3:copy for tag package-release-14.7.3
package-release-14.7.4 Fri Dec 5 16:16:40 2014 -0800 14.7.4:copy for tag package-release-14.7.4

当我调用git别名时(taghist = for-each-ref --format =&#34;%(refname:short)%(taggerdate)%(subject)%(body)&#34; refs /标签),我得到

package-release-14.7.2
package-release-14.7.3
package-release-14.7.4

-San