如何查看git的tag历史记录

Contents
我们可以使用 git for-each-ref
或 git 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),
creatordate
和committerdate
可能不同,因为你可以在未来的某个时间点为一个过去的提交打上标签。 - 对于轻量标签 (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 |
命令最简单,易于记忆。 | 默认不显示时间信息。 | 只需要快速列出标签名和简介。 |