Contents

如何查看git的tag历史记录

我们可以使用 git for-each-refgit log 命令来查看所有 Git 标签(tag)的版本和其关联的提交时间。一般来说方法有几种,列出来与君共享。

方法一:使用 git for-each-ref (推荐)

这是最灵活和功能最强大的方法,可以让你自定义输出格式。

1. 按标签创建时间倒序排列

这个命令会列出所有标签,并显示标签名、标签创建的 ISO 格式日期和关联的提交信息。

git for-each-ref --sort=-creatordate --format='%(refname:short) | %(creatordate:iso) | %(subject)' refs/tags

命令解析:

  • --sort=-creatordate: creatordate 指的是标签对象的创建时间。前面的 - 号表示按时间倒序排列(最新的在前)。
  • --format='...': 自定义输出格式。
    • %(refname:short): 显示简短的引用名称(即标签名,如 v1.2.0)。
    • %(creatordate:iso): 以 ISO 8601 格式显示标签创建日期 (例如 2023-10-27 15:30:00 +0800)。
    • %(subject): 显示该标签指向的提交的第一行信息。
    • ' | ': 用竖线分隔,使输出更清晰。
  • refs/tags: 指定只遍历所有标签。

输出示例:

v2.1.0 | 2024-05-20 11:45:12 +0800 | feature: Add user profile page
v2.0.0 | 2024-03-15 09:21:30 +0800 | release: Major version 2.0
v1.5.1 | 2024-02-10 18:00:55 +0800 | fix: Correct a critical bug in payment module

2. 按提交时间倒序排列

如果你更关心标签指向的提交是什么时候创建的,而不是标签本身的创建时间,可以使用 committerdate

git for-each-ref --sort=-committerdate --format='%(refname:short) | %(committerdate:iso) | %(subject)' refs/tags

说明:

  • 对于附注标签 (Annotated Tag)creatordatecommitterdate 可能不同,因为你可以在未来的某个时间点为一个过去的提交打上标签。
  • 对于轻量标签 (Lightweight Tag),它没有自己的创建时间,所以 creatordate 会直接显示其指向的提交的 committerdate

方法二:使用 git log

这是一种更简洁直观的方法,利用 git log 的格式化功能。

git log --tags --simplify-by-decoration --pretty="format:%d %ai %s"

命令解析:

  • --tags: 让日志显示所有标签指向的提交。
  • --simplify-by-decoration: 一个非常有用的选项,它会确保每个标签只显示一次,而不是显示从一个标签到另一个标签之间的所有提交。
  • --pretty="format:...": 自定义输出格式。
    • %d: 显示该提交的 “decoration”,也就是它的引用名(比如 tag: v1.2.0)。
    • %ai: 显示作者的提交日期 (ISO 格式)。
    • %s: 显示提交信息的第一行。

输出示例:

 (tag: v2.1.0) 2024-05-20 11:43:00 +0800 feature: Add user profile page
 (tag: v2.0.0) 2024-03-15 09:20:15 +0800 release: Major version 2.0
 (tag: v1.5.1) 2024-02-10 17:59:40 +0800 fix: Correct a critical bug in payment module

方法三:简单的 git tag 命令组合

如果你只需要一个快速概览,git tag 本身也提供了一些有用的参数。

git tag -l -n --sort=-creatordate

或者按版本号排序:

git tag -l -n --sort=-v:refname

命令解析:

  • -l: (List) 列出所有标签,这是默认行为,但与其他参数组合时需要显式写出。
  • -n: 同时显示每个标签的附注信息(对于附注标签)或提交信息(对于轻量标签)的第一行。
  • --sort=-creatordate: 按标签创建时间倒序排序。
  • --sort=-v:refname: 按版本号(version)倒序排序,非常适合 v1.0, v1.2, v2.0 这种命名格式。

此方法的缺点是:它默认不直接显示日期,但对于快速查找和阅览非常方便。


总结

方法 优点 缺点 适用场景
git for-each-ref 功能最强,完全可定制,信息精确。 命令稍长,需要记忆格式化参数。 需要精确控制输出格式,或用于自动化脚本中。
git log 命令相对简洁,输出直观易懂。 定制性不如 for-each-ref 日常开发中快速查看标签和其上下文。
git tag 命令最简单,易于记忆。 默认不显示时间信息。 只需要快速列出标签名和简介。