对某一时间点上的版本进行打标签,比如在发布某个版本的时候。
注意:
本地标签与远程标签是相互独立的。
本地有的标签,远程仓库可以没有。远程仓库中有的标签,本地也可以没有。两者相互不影响。而且,在正常 push 与 pull 时,标签不会被提交或拉取。
不显式将标签提交到远程仓库,本地的标签就不会出现在远程仓库中。同样,不显式的删除远程仓库中的标签,即使本地已经没有了指定的标签,远程仓库中还会存在。
命令
主要涉及的操作有:增,删,查,推送到远程仓库,删除远程仓库中的标签,从远程仓库拉取。
标签 | 含义 |
---|---|
git tag <tagname> | 创建指定名字的标签 |
git tag <tagname> <checksum> | 在指定的提交处创建一个标签 |
git tag -a <tagname> -m <msg> | 创建指定名字的带信息的标签 |
git tag -a <tagname> <checksum> -m <msg> | 创建指定名字的带信息的标签 |
git tag --delete <tagname> | 删除本地指定的标签 |
git tag | 列出所有标签 |
git show tag <name> | 查看指定标签的详细信息 |
git push <仓库别名> <tagname> | 将指定的标签提交到远程仓库中 |
git push <仓库别名> --tags | 将本地所有标签提交到远程仓库中 |
git push <仓库别名> --delete tag <tagname> | 删除远程库中指定的标签 |
git fetch <仓库别名> tag <tagname> | 拉取远程库中指定的标签 |
所有跟远程仓库相关的,都需要指定仓库别名。
删除远程仓库中的标签时,需要关键字 tag 。如果直接写成 git push <别名> --delete <name> 指的是删除远程仓库中的分支。
通过 fetch 获取远程标签时,也需要使用 tag 关键字。不使用 tag 关键字时,表示 fetch 远程的分支。
创建
简单标签
可以通过 git tag <name> 创建一个标签。
带附注(annotated)的标签
git tag -a <name> -m <msg>。其中 msg 是对该标签的说明。
$ git tag -a tagName -m "msg"
一个简单标签很像一个不会改变的分支,它只是一个指向特定提交对象的指针。然而,附注标签是存储在 Git 数据库中的一个完整对象,其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。
后补标签
在某些时候可能需要对原来某次提交打标签,可以使用 git tag <name> <checksum> 对某次提交进行后补标签。如下:
-
首先能过 git log 查看想要打标签的校验和:
$ git log --pretty=oneline ff9fcc37b359373f10d4d12fdc32d3e1994d8e05 Update a.txt 45adb4b64a43fccb10672199997f36d2c1f4caa6 Create test.html ec9d334dd611e6d058a91d70110afa73ec092a47 Update a.txt 02cba518a42c11e0bc90ed21c9ebe72a8d5252d0 remove 06254ef89d49a33669c48849961b50044ac551c4 rm c2139ae9909fcf0fc01dcaa2d9defee3cfac84da Create test
-
通过 git tag 增补标签:
$ git tag -a v0.2 c2139ae9909fcf0fc01dcaa2d9defee3cfac84da
- 也可以通过 git tag -a <name> <checksum> -m <msg> 增补一个带文字说明的标签。如上面的示例,它会启动文本编辑器,让输入本次标签的文字说明。
查看
显示标签详细信息
通过 git show <name> 显示指定标签的详细信息
$ git show tagName
tag tagName
Date: Fri Sep 8 17:09:22 2017 +0800
msg
这里并不是类似于 remote 命令时使用 git remote show 格式,而是使用 git show ,因为 git tag show 会创建一个名为 show 的标签。
列出已有的标签
通过 git tag 列出所有的标签;
-
通过 -l 列出符合模式的所有标签。如:
git tag -l "*.1.*" v2.1.1 v2.1.1.2 v2.1.2
其中 *.1.* 就是指定的标签模式。
所有的 tag 按字母顺序排列显示,而不是按时间顺序。
提交
默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push <别名> <name> 。
- 可以使用 git push <别名> --tags 将本地所有的新建标签都 push 到远程仓库中。
删除
本地删除
使用git tag --delete <name> 删除指定的 tag。
可以将 --delete 换成 -d。git 中,-- 后跟的是单词全称,- 后跟的是单词简写,但两者用途完全一样。
$ git tag
t1
t2
$ git tag -d t1
Deleted tag 't1' (was 884d05c)
$ git tag
t2
$ git tag --delete t2
Deleted tag 't2' (was 504b7e0)
$ git tag
$
最后使用 git tag 时,本地已经没有标签了。
远程删除
使用 git push <别名> --delete tag <name> 删除指定仓库的指定标签。
删除远程仓库中指定的标签后,本地的标签可以一直存在。
同样,--delete 也可以换成 -d 。
远程删除后,本地的标签还存在,可以通过 git tag -d 删除本地标签。
拉取远程标签
使用 git fetch <别名> tag <name> 获取本地不存在,而远程存在的标签。
如:
ZBMAC-C02VP4ZUH:demo xx$ git tag
ZBMAC-C02VP4ZUH:demo xx$ git fetch origin tag test
From https://github.com/xx/gitdemo
* [new tag] test -> test
ZBMAC-C02VP4ZUH:demo xx$ git tag
test
第二个命令拉取远程的 test 标签,然后本地才有 test 标签存在。