就像大多数版本控制系统一样,Git
可以把特定的历史版本标记为重要版本。其典型应用场景是标出发布版本(v1.0
等)。在本节中,你可以学到如何列举所有可用的标签,如何创建新的标签以及不同标签之间的差异
列举标签
在Git
中,列举可用表的操作很简单,只需要键入git tag
即可:
$ 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
系列的标签版本,可以执行以下命令
$ 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
命令即可:
$ git tag -a v1.14 -m "my version 1.4"
$ git tag
v0.1
v1.3
v1.4
-m
选项指定了标记信息,它会伴随着标签一起被存储。如果你没有为注释标签指定标记消息,Git
会打开文本编辑器以便你进行输入
执行git show
命令可以看到标签数据以及对应的提交:
$ 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
选项
$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5
如果你现在在这表标签上执行git show
,除了提交信息之外,不会看到别的标签信息
$ 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
版本的标签,而该版本对应的应该是“参数控制评论显示”这次提交。你仍然可以在这时标签这次提交。只需要在命令最后指定提交的校验和(或部分校验和)就可以了:
$ git tag -a v2.3.3 41f4f0
共享标签
默认情况下,git push
命令不会把标签传输到远程服务器上。在创建了标签之后,你必须明确地将标签推送到共享服务器上。这个过程有点像推送分支,对应的命令是git push origin [tag name]
$ git push origin v2.3.3
如果你有很多标签需要一次性推送过去,可以使用git push
命令的--tags
选项。这会把所有服务器上还没有标记都推送过去
$ git push origin --tags
执行完上述命令后,如果其他人此时对仓库执行克隆或拉去操作,它们也能够得到所有的标签
检出标签
你是无法在Git
中真正检出一个标签的,这是因为标签无法移动。如果想将某个版本的仓库放入像是标签的工作目录中,可以使用git checkout -b [branch name] [tag name]
在特定标签上创建一个新的分支:
$ 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]
删除标签
$ git tag -d v.2.3.3
Deleted tag 'v.2.3.3' (was 4161da8)
如果你已经推送到远程仓库上了,你可以执行git push origin :refs/tags/[tag name]
删除标签
$ git push origin :refs/tags/v2.3.3