git tag 给某次提交打一个固定的名字,通常用来标记发布版本(v1.2.0)。它与分支的区别是:分支指针会随提交前移,标签永远指向那个提交。
本文列出 git tag 的常用参数,说明轻量标签与附注标签的区别、如何排序、如何推送和删除远端标签。
关于本系列
本文是《Git 使用教程》按命令拆分的第 22 / 28 篇,全部收录在 Git 栏目。参数表列的是日常高频项,并非穷举;想看某个命令的完整参数,用
git tag -h 看精简列表、git help tag 看完整手册。示例以 Git 2.56.0 为准。一、命令语法
先看语法骨架,再对照下一节的参数表。<占位> 表示必填值,实际输入时不要带尖括号;[...] 表示可选项,-- 用来分隔选项与路径。
bash语法
git tag [-a | -s] <tagname> [<commit>] [-m <msg>]
git tag -l [<pattern>]
git tag -d <tagname>...
二、参数逐项详解
下表按用途列出 git tag 的常用参数,每项都注明了「它到底改变了什么」。
| 参数 | 作用 |
|---|---|
<tagname> | 不带 -a 时创建轻量标签,只是一个指向提交的引用 |
-a <名> / --annotate | 创建附注标签,含打标签者、日期与说明,发布版本首选 |
-m <信息> / --message | 直接给附注标签写说明,免去打开编辑器 |
-s / --sign | 用 GPG 给标签签名 |
-v / --verify | 验证标签的 GPG 签名 |
-l <模式> / --list | 列出标签,支持通配符,如 git tag -l "v1.*" |
-d / --delete | 删除本地标签 |
-f / --force | 强制覆盖同名标签(改名要谨慎,已发布的别覆盖) |
--sort=<键> | 排序,版本号倒序常用 --sort=-version:refname |
-n<行数> | 列出标签时附带前 n 行说明 |
--contains <commit> | 只列包含该提交的标签,查「这个修复发布在哪个版本」很好用 |
--merged / --no-merged <commit> | 按是否已合并进指定提交过滤 |
<commit> | 给历史中某次提交补打标签,默认打在 HEAD |
轻量标签 vs 附注标签
| 对比 | 轻量标签 | 附注标签 |
|---|---|---|
| 创建方式 | git tag v1.0 | git tag -a v1.0 -m "..." |
| 存的内容 | 只是一个引用 | 独立对象,含作者、日期、说明、可签名 |
| 推荐场景 | 本地临时标记 | 正式发布、需要签名或追溯 |
三、常用示例
发布打标签
bash发布打标签
git tag -a v1.2.0 -m "release 1.2.0"
git tag -l "v1.*" --sort=-version:refname
git show v1.2.0 --stat
git push origin v1.2.0
给历史提交补标签 / 查归属
bash给历史提交补标签 / 查归属
git tag -a v1.1.9 a1b2c3d -m "补打 1.1.9"
git tag --contains a1b2c3d
git push --tags
删除标签
bash删除标签
git tag -d v1.2.0
git push origin --delete v1.2.0
# 或 git push origin :refs/tags/v1.2.0
四、注意事项
标签默认不会随 push 上传
git push 只推分支,要显式 git push origin v1.2.0 或 git push --tags(后者会把所有本地标签推上去,容易把临时标签也带出去)。更推荐 push.followTags=true 配合显式推附注标签。已发布的标签不要 -f 覆盖: 别人可能已经基于它构建了产物。发现打错版本时,正确做法是删掉后重新沟通,或直接发一个新的补丁版本标签。
五、小结
git tag 的参数围绕「建 / 列 / 删」三件事,真正需要决策的只有一处:正式发布一律用 -a 附注标签。再记住标签要单独 push、已发布的不覆盖,就够了。
本系列共 28 篇,一个命令一篇,完整目录见 Git 栏目。下一篇:git remote 命令参数详解。