掌握 Git Tag 的创建、查看、推送和删除,学会用语义化版本管理规范项目发布。
分支会随着开发不断前进,但 Tag 是固定在某个提交上的标记,永远不会移动。它最常见的用途就是标记版本号:v1.0.0、v2.1.3。
一、
什么是 Tag?
Tag 是给某个提交打上的不可移动的标签。即使后续有新提交,Tag 始终指向它被创建时的那个提交。
1
| A → B → C (tag: v1.0.0) → D → E (tag: v1.1.0) → F (HEAD)
|
Tag vs Branch
| 特性 | Tag | Branch |
|---|
| 是否移动 | 固定不动 | 随提交前进 |
| 用途 | 标记版本、里程碑 | 日常开发 |
| 能否切换 | 可以 checkout 查看 | 可以 checkout 开发 |
| 命名习惯 | v1.0.0 | main、feature/xxx |
二、
两种 Tag 类型
| 类型 | 说明 | 包含信息 |
|---|
| 轻量标签(lightweight) | 只是一个指针,类似分支 | 仅指向一个提交 |
| 附注标签(annotated) | 完整的 Git 对象 | 包含标签名、作者、日期、说明 |
推荐:版本发布用附注标签,它包含完整的元信息,方便追溯。
三、
创建 Tag
附注标签(推荐)
1 2 3 4 5
| git tag -a v1.0.0 -m "Release v1.0.0 - 首个正式版"
git tag -a v0.9.0 -m "Beta 版本" abc1234
|
| 参数 | 含义 |
|---|
-a | --annotate,创建附注标签 |
-m | --message,标签说明信息 |
轻量标签
签名标签(GPG 签名)
1 2
| git tag -s v1.0.0 -m "Signed release v1.0.0"
|
四、
查看 Tag
列出所有 Tag
1 2 3 4 5 6 7 8 9 10
| git tag
git tag -l "v1.*"
|
查看 Tag 详情
1 2 3 4 5 6 7 8 9 10 11
| git show v1.0.0
|
查看 Tag 对应的提交
1 2 3
| git log --oneline --tags --decorate
|
五、
推送 Tag 到远程
Tag 不会自动推送:git push 默认只推送分支,不推送 Tag。你需要手动推送。
推送单个 Tag
推送所有 Tag
在 push 时自动推送 Tag
1 2
| git config --global push.followTags true
|
推荐
push.followTags 只会推送有对应提交的附注标签,不会推送轻量标签和无关 Tag。
六、
删除 Tag
删除本地 Tag
删除远程 Tag
1 2 3 4 5
| git push origin --delete v1.0.0
git push origin :refs/tags/v1.0.0
|
删除远程 Tag 需谨慎:如果别人已经 pull 过这个 Tag,他们本地仍然保留。需要所有人各自删除,或者通知团队同步。
七、
切换到 Tag
Tag 不能像分支一样直接 checkout 后开发,但你可以查看该版本代码或基于它创建新分支。
查看 Tag 的代码(游离头指针)
注意
游离头指针(detached HEAD)状态下的提交不属于任何分支,切换走就丢了。只适合查看代码,不适合开发。
基于 Tag 创建新分支(推荐)
1 2
| git checkout -b hotfix/login-bug v1.0.0
|
这常用于给旧版本打补丁:用户还在用 v1.0,但 main 已经开发到 v2.0 了,你基于 v1.0 的 Tag 创建 hotfix 分支修复问题。
八、
语义化版本号(SemVer)
Tag 命名推荐使用语义化版本号:v主版本.次版本.修订号
| 部分 | 含义 | 什么时候加 |
|---|
| 主版本(Major) | 不兼容的 API 变更 | 大重构、破坏性改动 |
| 次版本(Minor) | 向下兼容的新功能 | 新功能、新接口 |
| 修订号(Patch) | 向下兼容的 Bug 修复 | 修 Bug、小优化 |
1 2 3
| v1.0.0 → v1.0.1 ← 修了个 Bug v1.0.1 → v1.1.0 ← 加了新功能 v1.1.0 → v2.0.0 ← 有破坏性改动
|
预发布版本
1 2 3 4
| v1.0.0-alpha.1 ← 内测版 v1.0.0-beta.2 ← 公测版 v1.0.0-rc.1 ← 候选发布版(Release Candidate) v1.0.0 ← 正式版
|
九、
实战:完整发布流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| git checkout main git pull origin main
npm test
git tag -a v1.0.0 -m "Release v1.0.0
- 用户登录注册功能 - 首页数据展示 - API 接口文档"
git push origin v1.0.0
git push origin main --follow-tags
|
在 GitHub/Gitee 上创建 Release
推送 Tag 后,在仓库页面可以看到该 Tag,点击可以创建 Release:
- 填写版本说明
- 上传构建产物(如
.jar、.exe) - 标记是否为预发布版本
总结:Tag 速查卡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ┌──────────────────────────────────────────────────────────┐ │ Git Tag 速查 │ ├────────────────┬─────────────────────────────────────────┤ │ 创建附注标签 │ git tag -a v1.0.0 -m "说明" │ │ 创建轻量标签 │ git tag v1.0.0 │ │ 在指定提交创建 │ git tag -a v1.0.0 <hash> -m "说明" │ ├────────────────┼─────────────────────────────────────────┤ │ 查看所有标签 │ git tag / git tag -l "v1.*" │ │ 查看标签详情 │ git show v1.0.0 │ ├────────────────┼─────────────────────────────────────────┤ │ 推送单个标签 │ git push origin v1.0.0 │ │ 推送所有标签 │ git push origin --tags │ │ 自动跟随推送 │ git config --global push.followTags true │ ├────────────────┼─────────────────────────────────────────┤ │ 删除本地标签 │ git tag -d v1.0.0 │ │ 删除远程标签 │ git push origin --delete v1.0.0 │ ├────────────────┼─────────────────────────────────────────┤ │ 基于标签建分支 │ git checkout -b hotfix v1.0.0 │ └────────────────┴─────────────────────────────────────────┘
|