快速掌握Git Tag

2023-10-20 18:56:07 浏览数 (2)

就像大多数版本控制系统一样,Git可以把特定的历史版本标记为重要版本。其典型应用场景是标出发布版本(v1.0等)。在本节中,你可以学到如何列举所有可用的标签,如何创建新的标签以及不同标签之间的差异

列举标签

Git中,列举可用表的操作很简单,只需要键入git tag即可:

代码语言:javascript复制
$ git tag
v1.0.0
v1.1.0
v1.2.0
v1.3.0
v1.4.0
v2.0
v2.1
v2.2
v2.3
v2.3.1
v2.3.2
v2.3.3

这条命令会按照字母顺序列出所有的标签。列举的顺序先后和标签的重要性无关

你可以按照某个特定匹配模式搜索标签。举例来说,Git的源代码仓库包括超过500个标签。如果你只想要看到1.8.5系列的标签版本,可以执行以下命令

代码语言:javascript复制
$ git tag -l 'v1.8.5'
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5

创建标签

Git使用的标签主要有两种类型:轻量(lightweight)标签和注释(annotated)标签

轻量标签很像是一个不变的分支——它只是一个指向某次提交的指针

注释标签则会作为完整的对象存储在Git数据库中。Git会计算其校验和,除此之外还包含其他信息,比如标记着tagger的名字、邮箱地址和标签的创建时间,还有标记消息tagging message,另外还可以利用GNXU Privacy Guard(GPG)对它们进行签名和验证。一般推荐创建注释标签,这样可以包含上述所有信息。但如果你需要的只是一个临时标签,或者由于某些愿意不需要包含那些额外信息,也可以用轻量标签

注释标签

创建注释标签很简单,只需要执行带有-a选项的tag命令即可:

代码语言:javascript复制
$ git tag -a v1.14 -m "my version 1.4"
$ git tag
v0.1
v1.3
v1.4

-m选项指定了标记信息,它会伴随着标签一起被存储。如果你没有为注释标签指定标记消息,Git会打开文本编辑器以便你进行输入

执行git show命令可以看到标签数据以及对应的提交:

代码语言:javascript复制
$ git show v1.4
tag v1.4
Tagger: Ben Straub<ben@straub.cc>
Date: Sat May 3 20:19:12 2014 -0700

my version 1.4

commit .....

上述命令的输出显示了标记着信息、提交被标记的日期以及注释信息,最后是提交信息

轻量标签

另一种用来标记提交的方法是使用轻量标签。这种标签基本上就是把提交的校验和保存到文件中,初次之外,不包含其他任何信息。创建一个轻量标签时不需要使用-a-s-m选项

代码语言:javascript复制
$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5

如果你现在在这表标签上执行git show,除了提交信息之外,不会看到别的标签信息

代码语言:javascript复制
$ git show v1.4-lw
commit 4161da8adb3ae644b9689a9007dc99b51731f7ba
Author: CarlDuFromChina <18556906294@163.com>
Date:   Fri Oct 29 15:07:20 2021  0800

    release v2.3.3

补加标签

你还可以随后再给之前的提交添加标签。假设你的提交历史看起来像下面这样

代码语言:javascript复制
$ git log --pretty=oneline
41f4f048b51a6a32c418b39c853d1f33ff7b45fe 参数控制评论显示
580e8cf14333dfb6d5eafb00259316ca84c2ff8e 修改网页相关信息

现在,假如你忘记了给项目添加v2.3.3版本的标签,而该版本对应的应该是“参数控制评论显示”这次提交。你仍然可以在这时标签这次提交。只需要在命令最后指定提交的校验和(或部分校验和)就可以了:

代码语言:javascript复制
$ git tag -a v2.3.3 41f4f0

共享标签

默认情况下,git push命令不会把标签传输到远程服务器上。在创建了标签之后,你必须明确地将标签推送到共享服务器上。这个过程有点像推送分支,对应的命令是git push origin [tag name]

代码语言:javascript复制
$ git push origin v2.3.3

如果你有很多标签需要一次性推送过去,可以使用git push命令的--tags选项。这会把所有服务器上还没有标记都推送过去

代码语言:javascript复制
$ git push origin --tags

执行完上述命令后,如果其他人此时对仓库执行克隆或拉去操作,它们也能够得到所有的标签

检出标签

你是无法在Git中真正检出一个标签的,这是因为标签无法移动。如果想将某个版本的仓库放入像是标签的工作目录中,可以使用git checkout -b [branch name] [tag name]在特定标签上创建一个新的分支:

代码语言:javascript复制
$ git checkout -b 2.3.3 v2.3.3
Switched to a new branch '2.3.3'

如果你执行上面的操作并完成了提交,那么2.3.3分支会和你的标签v2.3.3略有不同,它携带了新的变更,所以要小心操作

删除标签

如果你创建了错误的标签,那么你可以执行git tag -d [tag name]删除标签

代码语言:javascript复制
$ git tag -d v.2.3.3
Deleted tag 'v.2.3.3' (was 4161da8)

如果你已经推送到远程仓库上了,你可以执行git push origin :refs/tags/[tag name]删除标签

代码语言:javascript复制
$ git push origin :refs/tags/v2.3.3

0 人点赞