在 Git 版本控制中,标签(Tag)是对某次重要提交(commit)的永久性标识,相当于给特定的代码版本起了一个 “别名”

它常被用于标记项目的里程碑,比如软件发布版本(v1.0、v2.1.3)、重大功能上线节点等,方便后续快速回溯到对应的代码状态。本文将详细讲解 Git 标签的创建、查看、删除、推送等核心操作。

一、标签的核心作用

  • 版本标记:用清晰的名称(如 v1.0)替代冗长的 commit id(如 6967e5d),直观标识重要版本。
  • 快速回溯:需要查看历史版本时,直接通过标签切换,无需记忆或查找 commit id。
  • 协作规范:作为团队协作的版本基准,明确 “测试版本”“正式发布版本” 等节点,避免版本混乱。

二、创建标签

Git 支持两种标签类型:轻量标签(Lightweight Tag) 和 附注标签(Annotated Tag)。轻量标签仅存储标签名和对应的 commit id,相当于简单的 “别名”;附注标签会包含标签作者、创建时间、说明文字等完整信息,更适合正式场景(如发布版本)。

1. 切换到目标分支直接

标签是基于特定分支的提交创建的,首先需要切换到要打标签的分支,再使用git标签命令git tag [name] 打上标签。

# 切换到目标分支(如 master)
git checkout master
# 查看当前本地分支
git branch
* master
  dev
# 最简单的标签方法,给当前分支打上标签
git tag v1.0

2. 创建轻量标签

如果需要给历史提交打标签,需先找到对应的 commit id,,指定提交创建标签:

# 步骤1:查看历史提交记录(--pretty=oneline 简化输出,--abbrev-commit 显示简写 commit id)
……:`$ git log --pretty=oneline --abbrev-commit
 6967e5d (HEAD -> master) 完成首页功能开发
 d842888 修复登录bug
 4ee30f7 添加 .gitignore 文件
 8746dc6 更新说明文档
# 步骤2:给 commit id 为 4ee30f7 的历史提交打标签 v0.9
……:`$ git tag v0.9 4ee30f7

3. 创建附注标签

附注标签使用如下命令:

git tag -a [name] -m "XXX" [commit_id]
# 给最新提交创建附注标签 v1.0,说明文字为“正式发布1.0版本”
git tag -a v1.0 -m "正式发布1.0版本:包含用户登录核心功能"
# 给历史提交创建附注标签
git tag -a v0.9 -m "测试版本0.9:完成基础功能开发" 4ee30f7

三、查看标签

1. 查看所有标签

使用 git tag命令可列出本地所有标签,标签按字母顺序排序(而非创建时间)

……:`$ git tag
v0.9
v1.0

2. 查看标签详细信息

使用 git show [标签名] 命令查看标签的详细信息,包括对应的 commit 内容、作者、时间等:

# 查看轻量标签 v1.0 的信息(仅显示 commit 详情)
git show v1.0
# 查看附注标签 v0.9 的信息(包含标签说明、作者、commit 详情等)
git show v0.9

输出示例(附注标签):

tag v0.9
Tagger: 你的用户名 <你的邮箱>
Date:   Fri Nov 20 15:30:00 2024 +0800
测试版本0.9:完成基础功能开发
commit 4ee30f7a6170c7cc267a6d8428886967e5d (tag: v0.9)
Author: 你的用户名 <你的邮箱>
Date:   Fri May 12 10:27:06 2023 +0800
    添加 .gitignore 文件
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e69de29

四、删除标签

1. 删除本地标签

使用 git tag -d [标签名] 命令删除本地标签:

# 删除本地标签 v1.0
git tag -d v1.0
# 输出:Deleted tag 'v1.0' (was 6967e5d)

2. 删除远程标签

如果标签已经推送到远程仓库,需要分两步删除:先删除本地标签,再删除远程标签:

# 步骤1:删除本地标签
git tag -d v1.0
# 步骤2:删除远程仓库的标签
git push origin :refs/tags/v1.0
# 输出示例:
# To gitee.com:hyb91/git_teaching.git
#  - [deleted]         v1.0

五、推送标签到远程仓库

本地创建的标签默认仅存储在本地,需要手动推送到远程仓库,才能让团队其他成员可见。

1. 推送单个标签

使用git push origin [标签名]命令推送指定标签到远程:

# 推送标签 v1.0 到远程
git push origin v1.0
# 输出示例:
# Total 0 (delta 0), reused 0 (delta 0)
# remote: Powered by GITEE.COM [GNK-6.4]
# To gitee.com:hyb91/git_teaching.git
# * [new tag]         v1.0 -> v1.0

2. 推送所有本地标签

如果本地创建了多个标签,可使用git push origin --tags 命令一次性推送到远程:

git push origin --tags
# 输出示例:
# Counting objects: 1, done.
# Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
# Total 1 (delta 0), reused 0 (delta 0)
# remote: Powered by GITEE.COM [GNK-6.4]
# To gitee.com:hyb91/git_teaching.git
#  * [new tag]         v0.9 -> v0.9
#  * [new tag]         v1.0 -> v1.0

六、常见操作场景总结

操作需求命令
创建轻量标签(最新提交)git tag 标签名
创建轻量标签(指定提交)git tag 标签名 commit_id
创建附注标签(最新提交)git tag -a 标签名 -m "说明文字"
创建附注标签(指定提交)git tag -a 标签名 -m "说明文字" commit_id
查看所有标签git tag
查看标签详情git show 标签名
删除本地标签git tag -d 标签名
删除远程标签git push origin :refs/tags/标签名
推送单个标签到远程git push origin 标签名
推送所有标签到远程git push origin --tags

七、注意事项

  1. 标签是 “只读” 的:创建后不会随后续提交变化,若需要更新标签,需先删除旧标签再重新创建。
  2. 标签与分支的区别:分支会随提交动态移动(指向最新提交),而标签固定指向某个特定提交,适合标记静态版本。
  3. 远程标签同步:团队协作时,若需要获取远程仓库的标签,可使用git fetch origin --tags 拉取所有远程标签到本地。