git也可以像svn一样打标签,以此来标记发布节点,以示重要性。
对标签的操作,一般包括:
1. 列出标签
2. 创建标签
3. 删除标签
4. 检出标签
一、列出标签
执行git tag
命令,就可以看到当前仓库中已经打过的标签。
注意: 这个命令会以字母顺序列出标签。
也可以加上-l
或--list
选项,那就是按照通配符列出标签。
例:
执行git tag -l "v1.0*"
二、创建标签
git支持两种标签:轻量标签(lightweight)、附注标签(annotated)。
- 轻量标签: 像是一个不会改变的分支,它只是某个特定提交的引用。
- 附注标签: 是存储在git数据库中的一个完整对象,它们是可以被校验的,包含:打标签者的名字、电邮、日期,标签信息(使用GPG签名并验证)
注意: 鉴于附注标签包含的信息多,因此建议使用附注标签。
此外,git也支持 补打标签 和 共享标签 。
- 补打标签: 对以往的提交打标签;
- 共享标签: 像共享远程分支一样,将标签推送到远程服务器上,共享该标签。
(一)轻量标签
轻量标签的本质是将提交校验和存储到一个文件中,不保存其他任何信息。
创建轻量标签时,只需要执行git tag
命令即可,后边不加任何的选项。
例:
执行git tag v1.0.0-lw
命令,结果显示如下:
(二)附注标签
创建附注标签时,需要加上-a
选项。同时也需要加上-m
选项,这是为标签添加注释,这条注释会存储再标签中,如果没有为附注标签指定一条信息的话,git会启动编辑器要求你输入信息。
例:
执行git tag -a v1.0.1 -m "附注标签1.0.1"
结果如下:
输出显示了打标签者的信息,打标签的日期,附注信息,具体的提交信息。
(三)补打标签
也可以对以前的提交打标签,假如,我希望对以前某次提交打个标签,那么可以先查找到那次提交的校验和,然后执行git tag -a
命令。
例:
希望对下图第二行的提交打标签,
执行git tag -a v1.0.2 7c1bdc8f7b14caa43c93bfcf0286eebf07da755e
命令,结果如下:
对以往提交打标签,也就是要在那个提交上打标签,需要在命令的末尾指定提交的校验和(或部分校验和)
(四)共享标签
默认情况下,通过git push
命令不会将标签推送到远程仓库上,必须使用git push origin
命令才行。
如果希望一次推送多个标签的话,需要带上--tags
选项。
例:
git push origin --tags
注意: 使用git push
命令推送标签,并不会区分轻量标签和附注标签。
三、删除标签
删除标签分为两种情况:
- 删除本地仓库上的标签
- 删除远程仓库上的标签
(一)删除本地仓库的标签
删除本地仓库的标签,可以使用git tag -d
命令。
例:
删除v1.0.1
标签,可以执行git tag -d v1.0.1
命令。
注意: 删除本地仓库中的标签,不会删除掉远程仓库中的标签。
(二)删除远程仓库的标签
删除远程仓库的标签,有两种方式。
- 执行
git push
命令:refs/tags/ - 执行
git push
命令--delete
第一种命令的含义是,将冒号前面的空值推送到远程标签名,从而高效地删除它。
四、检出标签
如果希望查看某个标签指向的文件版本,可以使用git checkout
命令。
例:
执行git checkout v1.0.2
命令,展示结果如下:
git会提示,你正处于“分离头指针(detached HEAD)”状态。在这个状态下,如果我做了某些更改,然后提交了它们,那么标签不会发生变化,但是我的新提交将不属于任何分支,并且将无法访问,除非通过确切的提交哈希才能访问。
所以,当我们进行更改后,比如我要修改旧版本中的错误,那么我通常需要创建一个新分支:
git checkout -b version1.0.2 v1.0.2
如果在这进行了一次提交,那么version1.0.2
分支就会因为这个改动向前移动,此时它和v1.0.2
会有不同,这是需要注意的一点。