Git 可以对某一时间点上的版本打上标签。作用是标记一个点为版本号,如 V1.0.0,V1.0.1等等,在发布版本的时候,经常这么做。
列出现有标签
$ git tag //列出仓库内所有的标签
显示的标签按字母顺序排列,所以标签的先后并不表示重要程度的轻重。
我们可以用特定的搜索模式列出符合条件的标签。在 Git 自身项目仓库中,有着超过 240 个标签,如果你只对 1.4.2 系列的版本感兴趣,可以运行下面的命令:
$ git tag -l 'v1.4.2.*'
v1.4.2.1
v1.4.2.2
v1.4.2.3
v1.4.2.4
打标签
$ git tag -a 1.0.0 -m "Release version 1.0.0"
如果要添加详细注释,可以不加”-m”参数,这样执行git tag -a时会进入编辑器添加注释。
打标签的操作发生在我们commit修改到本地仓库之后。完整的例子:
$ git add .
$ git commit -m “fixed some bugs”
$ git tag -a 1.0.1 -m “Release version 1.0.1″
提交标签到远程服务器上
$ git push origin master
$ git push origin --tags
–tags参数表示提交所有tag至服务器端,普通的git push origin master操作不会推送标签到服务器端。如果要推送单独的一个标签到服务器,推送的时候直接加上标签的名字:
$ git push origin v1.0.0
可以使用 git show 命令查看相应标签的版本信息,并连同显示打标签时的提交对象。
$ git show v1.0.0
tag v1.0.0
Tagger: yuelengloulan <yuelengloulan@gmail.com>
Date: Sat May 20 02:13:25 2017 +0800
first tag on master
commit 02059709034621ef9dd329ac024dfe5705cd566d
Author: yuelengloulan <yuelengloulan@gmail.com>
Date: Sat May 20 02:06:12 2017 +0800
first create file
diff --git a/myfile.txt b/myfile.txt
new file mode 100644
index 0000000..29cd67d
--- /dev/null
+++ b/myfile.txt
@@ -0,0 +1 @@
+first my file
我们可以看到在提交对象信息上面,列出了此标签的提交者和提交时间,以及相应的标签说明。
从远程服务器同步标签
- 克隆仓库会将仓库内所有标签同步下来
$ git clone reponame
- 拉取远程修改
$ git fetch origin --tags
执行完git fetch执行git tag会看到远程标签已经被拉取到本地。
删除标签的命令
- 删除本地标签
$ git tag -d v1.0.2
- 删除远端服务器的标签
$ git push origin :refs/tags/v1.0.2
切换到标签
$ git checkout tagname
执行完切换之后,Git提示进入头指针分离状态
含附注的标签
创建一个含附注类型的标签非常简单,用 -a (译注:取 annotated 的首字母)指定标签名字即可:
$ git tag -a v1.0.2 -m 'Release Version 1.0.2'
$ git tag
v1.0.0
v1.0.1
v1.0.2
而 -m 选项则指定了对应的标签说明,Git 会将此说明一同保存在标签对象中。如果没有给出该选项,Git 会启动文本编辑软件供你输入标签说明。
轻量级标签
轻量级标签实际上就是一个保存着对应提交对象的校验和信息的文件。要创建这样的标签,一个 -a,-s 或 -m 选项都不用,直接给出标签名字即可:
$ git tag v1.0.3-lw
$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.3-lw
现在运行 git show 查看此标签信息,就只有相应的提交对象摘要:
$ git show v1.0.3-lw
commit b0d3c14a2b37f89d11ad19b5d02133006c02c0d6
Author: yuelengloulan <yuelengloulan@gmail.com>
Date: Sat May 20 02:18:05 2017 +0800
sencond edit commit
diff --git a/myfile.txt b/myfile.txt
index 29cd67d..5075299 100644
--- a/myfile.txt
+++ b/myfile.txt
@@ -1 +1,2 @@
first my file
+sencond editing
后期加注标签
你甚至可以在后期对早先的某次提交加注标签。比如在下面展示的提交历史中:
$ git log --pretty=oneline
3bbcf2ac3d4cb737cd2f4f86cc55dd0d14d7cdd0 fifth editting
70a49466a460260c372110b785fec577da89468e forth editting
26471a091a03da09976c863e0df384626ac334a6 third editting commit
b0d3c14a2b37f89d11ad19b5d02133006c02c0d6 sencond edit commit
02059709034621ef9dd329ac024dfe5705cd566d first create file
我们忘了在提交 “forth editting”后为此项目打上版本号 v1.0.4,没关系,现在也能做。只要在打标签的时候跟上对应提交对象的校验和(或前几位字符)即可:
$ git tag -a v1.0.4 70a4
可以看到我们已经补上了标签:
$ git tag
v1.0.0
v1.0.1
v1.0.2
v1.0.4
$ git show v1.0.4
tag v1.0.4
Tagger: yuelengloulan <yuelengloulan@gmail.com>
Date: Sat May 20 12:18:35 2017 +0800
add tag v1.0.4
commit 70a49466a460260c372110b785fec577da89468e
Author: yuelengloulan <yuelengloulan@gmail.com>
Date: Sat May 20 12:12:25 2017 +0800
forth editting
diff --git a/myfile.txt b/myfile.txt
index df07fdc..fdf3d6a 100644
--- a/myfile.txt
+++ b/myfile.txt
@@ -1,3 +1,4 @@
first my file
sencond editing
third editing
+forth editing
获取Git项目最后的TAG
$ git describe --tags `git rev-list --tags --max-count=1`