Git Tag 学习指南¶
1. 什么是 Tag¶
Tag(标签)是 Git 中用于标记特定提交(commit)的引用,通常用于标记发布版本(如 v1.0.0、v2.1.0)。
2. Tag 与 Branch 的区别¶
核心差异¶
| 特性 | Tag | Branch |
|---|---|---|
| 用途 | 标记特定版本 | 持续开发 |
| 是否移动 | 固定不变 | 随新 commit 移动 |
| 命名规范 | 版本号(v1.0.0) | 功能名(feature/xxx) |
为什么 Tag 和 Commit 版本强绑定?¶
1. 不可变性
- Tag 一旦创建,就永久指向某个特定的 commit,不会随时间改变
- Branch 会随着新 commit 的提交不断向前移动
- 这保证了
v1.0.0在任何时间点都代表完全相同的代码状态
2. 版本追溯性
# Tag 保证你能精确复现历史版本
git checkout v1.0.0 # 永远回到发布时的那个 commit
git checkout main # 回到最新状态(可能已变化)
- 当你修复 bug 后需要回溯对比,Tag 提供了可靠的版本锚点
- CI/CD 系统通过 Tag 触发构建,确保每次发布的产物可追溯
3. 发布语义
- Tag 代表"这是一个正式版本"的声明,具有里程碑意义
- Branch 只是开发线索,不代表发布状态
- 团队成员可以通过 Tag 快速识别哪些 commit 是经过测试发布的
4. 依赖管理
# 下游项目可以稳定依赖特定版本
pip install package==1.0.0 # 对应 git tag v1.0.0
go get github.com/user/repo@v1.0.0
- 包管理工具依赖 Tag 来锁定版本
- 如果用 Branch,依赖关系会随着代码更新而不稳定
5. 工作流示例
# 场景:线上出现紧急 bug,需要确认当前生产环境代码
# 使用 Tag:明确知道是 v1.2.3 版本
git show v1.2.3
git diff v1.2.3 v1.2.4 # 清晰看到版本间差异
# 使用 Branch:无法确定具体是哪个 commit
git log main # 需要人工排查,容易出错
3. 创建 Tag¶
3.1 轻量标签(Lightweight Tag)¶
仅指向特定 commit 的引用,不包含额外信息。
git tag v1.0.0
3.2 附注标签(Annotated Tag)(推荐)¶
包含标签信息、标签作者、日期和注释,存储为完整对象。
git tag -a v1.0.0 -m "Release version 1.0.0"
3.3 在指定 commit 创建标签¶
# 在历史 commit 上打标签
git tag -a v1.0.0 <commit-hash> -m "Release version 1.0.0"
# 示例
git tag -a v1.0.0 abc1234 -m "Fix critical bug"
4. 完整工作流示例¶
场景:发布 v1.0.0 版本¶
# 1. 切换到主分支
git checkout main
# 2. 拉取最新代码
git pull origin main
# 3. 确认当前 commit 是正确的发布版本
git log --oneline -5
# 4. 创建附注标签
git tag -a v1.0.0 -m "Release version 1.0.0 - Initial release"
# 5. 验证标签创建成功
git tag -l
git show v1.0.0
# 6. 推送标签到远程仓库
git push origin v1.0.0
# 7. 验证远程 tag
git ls-remote --tags origin | grep v1.0.0
5. 快速参考卡片¶
# 创建并推送标签(最常用)
git tag -a v1.0.0 -m "Release message"
git push origin v1.0.0
# 查看标签
git tag
git show v1.0.0
# 删除标签
git tag -d v1.0.0
git push origin --delete v1.0.0