前言
在日常生活中,标签(tag)就如其名称一样,是为了给某些事物做标记,方便下次快速寻找。
在 Git 中,除了 commit id 、提交信息之外,我们还可以给某次提交记录打上一个标签,方便下次快速寻找和定位。标签在 Git 中不是必须的,您可以根据需要选择性地添加,既可以在新提交记录上添加标签,也可以在已有的提交记录上添加标签。
Git 中的标签分为两种:
- 轻量标签(lightweight tag) – 给提交记录打一个标记,仅作为临时标记使用。
- 附注标签(annotated tag) – 存储在 Git 数据库中的一个完整对象,该对象包含打标签者的名称、电子邮件地址、日期时间、标签签名等,这些信息还允许被校验与验证。在项目正式发布版本之前,通常都会使用附注标签。
操作 git 中的标签
涉及到的命令有:
-
git tag
– 该命令可以对标签进行创建、删除、查看、重命名以及验证。该命令常用选项有:-l
– 列出标签,git tag
等同于git tag -l
。该选项也支持可选的模式(pattern),pattern 指的是 Shell 中的通配符,如用 "?" 匹配一个字符;"*" 匹配 0 个或多个任意字符;"[ ]" 匹配括号中的任意一个字符-n<num>
– 显示标签注释的前 n 行,若不指定 num,则默认值为 1。该选项需要与-l
一起使用-a
– 创建附注标签-m
– 与附注标签一起使用,表示为附注标签添加单行或多行的说明文本。bash 当中,多行文本请使用\n
进行换行操作,其他平台可考虑忽略-m
选项,这样会直接请求编辑器。-s
– 创建带 GPG 签名的标签-d
– 删除现有的给定名称的标签,支持对一个或多个标签的删除--sort=<key>
– 按照特定的 key 进行排序。key 可以有 objectsize、authordate、committerdate、creatordate、taggerdate、version:refname等。例如git tag -l --sort=creatordate
将按照提交记录的创建时间正序排列标签(即最旧提交记录的标签名排在最前面);git tag -l --sort=-creatordate
将按照提交记录的创建时间倒序排列标签(即最新提交记录的标签名排在最前面)
-
git show <tag-name>
– 显示某个标签的详细信息 -
git ls-remote --tags <remote-name>
– 显示远程仓库的标签信息。
标签名称的规范要求:
- 不能以
.
结尾 - 不能包含
\
- 不能出现
*
、?
、[
、空格、波浪号(~
)、^
、:
- 不能出现两个连续的点
- 对单词的大小写无特殊要求
- 多个单词可用
-
或_
进行连接 - 其他未提到的特殊字符
轻量标签
以下为轻量标签的示例:
-
为新的提交记录打上一个标签
上一篇文档我们演示了合并后的冲突解决,我们可以将这次的提交记录(9139f56)打一个标签:
PS > git log --oneline 9139f56 (HEAD -> master) 人为解决 error.log 的合并冲突 94f3acd 新文件 error.log 40ed5ac 新增三行内容到新文件 error.log 6f4b5d9 对文件control.txt的第三行进行追加 33fca75 新增文件control.txt 4be932e newb1分支中的第一个新文件 8a77771 修改后的lab-file文件 f20abbc lab-file初始内容 47d9368 tmp-file.txt --> Tmp-File.txt ae6cc9d First commit 9a70355 测试文件 PS > git tag Merge-Conflict 9139f56 PS > git tag -l Merge-Conflict
-
为旧的提交记录(f20abbc)打一个标签
PS > git tag lab-file f20abbc PS > git tag -l Merge-Conflict lab-file
注意!在默认情况下,标签的排序并不是按照打标签的时间先后顺序进行排序的,而是按照标签名称的字典序(字母序)进行排序。
-
查阅已有标签的信息
PS > git show lab-file commit f20abbc2845ea159ffc2bc998a7c374c5f6d4b0f (tag: lab-file) Author: xxxx
Date: Sun Mar 9 16:49:29 2025 +0800 lab-file初始内容 diff --git a/lab-file.txt b/lab-file.txt new file mode 100644 index 0000000..5516f96 --- /dev/null +++ b/lab-file.txt @@ -0,0 +1 @@ +hit = frotz(nitfol, mf2.ptr, 1, 0); -
删除已有的标签
PS > git tag -d Merge-Conflict Deleted tag 'Merge-Conflict' (was 9139f56)
-
重命名已有的标签
Git 中并不支持直接对标签名称进行重命名,我们需以间接的方式进行重命名。
PS > git tag -d lab-file Deleted tag 'lab-file' (was f20abbc) PS > git tag LAB-FILE f20abbc
-
对标签进行排序
PS > git tag alpha 9a70355 PS > git tag beta 33fca75 PS > git tag c1 40ed5ac PS > git log --oneline 9139f56 (HEAD -> master) 人为解决 error.log 的合并冲突 94f3acd 新文件 error.log 40ed5ac (tag: c1) 新增三行内容到新文件 error.log 6f4b5d9 对文件control.txt的第三行进行追加 33fca75 (tag: beta) 新增文件control.txt 4be932e newb1分支中的第一个新文件 8a77771 修改后的lab-file文件 f20abbc (tag: LAB-FILE) lab-file初始内容 47d9368 tmp-file.txt --> Tmp-File.txt ae6cc9d First commit 9a70355 (tag: alpha) 测试文件 # 默认的字典序 PS > git tag LAB-FILE alpha beta c1 # 按照提交记录的创建时间正序排列标签,即最旧提交记录的标签名排在最前面 PS > git tag -l --sort=creatordate alpha LAB-FILE beta c1 # 按照提交记录的创建时间倒序排列标签,即最新提交记录的标签名排在最前面 PS > git tag -l --sort=-creatordate c1 beta LAB-FILE alpha
附注标签
先将前面的示例轻量标签删除:
PS > git tag -d c1 beta LAB-FILE alpha
Deleted tag 'c1' (was 40ed5ac)
Deleted tag 'beta' (was 33fca75)
Deleted tag 'LAB-FILE' (was f20abbc)
-
对最新的提交记录创建带说明文本的附注标签
PS > git log --oneline 9139f56 (HEAD -> master) 人为解决 error.log 的合并冲突 94f3acd 新文件 error.log 40ed5ac 新增三行内容到新文件 error.log 6f4b5d9 对文件control.txt的第三行进行追加 33fca75 新增文件control.txt 4be932e newb1分支中的第一个新文件 8a77771 修改后的lab-file文件 f20abbc lab-file初始内容 47d9368 tmp-file.txt --> Tmp-File.txt ae6cc9d First commit 9a70355 测试文件 # 假设 9139f56 是即将发布的版本,我们可以添加一个带说明文本的附注标签 PS > git tag -a "v-1.0.0-2025-03-16" -m "第一个发布版本" 9139f56 PS > git tag -l v-1.0.0-2025-03-16 PS > git show v-1.0.0-2025-03-16 tag v-1.0.0-2025-03-16 Tagger: xxxx
Date: Sun Mar 16 10:04:28 2025 +0800 第一个发布版本 commit 9139f56b551e8b92e9f44cced300d20958f1d66f (HEAD -> master, tag: v-1.0.0-2025-03-16) Merge: 94f3acd 40ed5ac Author: xxxx Date: Sat Mar 15 11:25:20 2025 +0800 人为解决 error.log 的合并冲突 diff --cc error.log index b064141,77f96c9..af87e92 --- a/error.log +++ b/error.log @@@ -1,3 -1,3 +1,4 @@@ 1111 +NAME + ERROR 3333 如您所见,附注标签的输出信息分为三部分:
- 标签本身的元数据。包含附注标签名称;附注标签的创建者姓名与邮箱;附注标签的创建时间;附注标签的说明;GPG 签名信息(如果有的话)
- 标签指向的提交记录的信息
- 文件变更的内容
-
对历史的提交记录创建附注标签
PS > git tag -a "v-0.0.1-2025-03-16" -m "test" ae6cc9d
推送标签到远程仓库
默认情况下,git push
并不会将标签(轻量标签或附注标签)推送到远程仓库。
相关推送的语法:
# 推送单个标签(轻量标签或附注标签都可以)
Shell > git push <remote-name> <tag-name>
# 一次性推送所有标签(不区分轻量标签或附注标签)
Shell > git push <remote-name> --tags
删除远程仓库的标签
删除远程仓库的标签:
# 先将本地的标签删除
Shell > git tag -d <tag-name>
Shell > git push <remote-name> -d :refs/tags/<tag-name>
查看远程仓库的标签
Shell > git ls-remote --tags <remote-name>
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)

用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论