标签,顾名思义就是做标记,在git中,一般用与标记某个发布节点。
git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)。
轻量标签:很像一个不会改变的分支——它只是某个特定提交的引用,不会存储任何信息。
附注标签:是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。
通常会建议创建附注标签,这样你可以拥有以上所有信息。但是如果你只是想用一个临时的标签, 或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。
列出标签
使用git tag
命令(可带上可选的参数-l
或者-list
)
$ git tag
这个命令会以字母顺序列出标签,但不是很重要
如果对某个特定的版本号感兴趣,可以使用下面的方式:
$ git tag -l "v1.8.5*" # 查看v1.8.5系列
创建标签
附注标签:
在 git 中创建附注标签十分简单。 最简单的方式是当你在运行 tag
命令时指定 -a
选项:
$ git tag -a v1.0 -m 'test version 1.0'
-m
选项指定了一条将会存储在标签中的信息。 如果没有为附注标签指定一条信息,git 会启动编辑器要求你输入信息。
通过使用 git show
命令可以看到标签信息和与之对应的提交信息:
$ git show -q v1.0 # -q表示不显示差异输出
tag v1.0
Tagger: hahaha
Date: Sun Sep 27 14:21:53 2020 +0800
test version 1.0
commit 6680bd40434821abf3e29045593629d4c9fddb15 (HEAD -> master, tag: v1.0)
Author: hahaha
Date: Sun Sep 27 12:58:55 2020 +0800
modify google.txt add google play
输出显示了打标签者的信息、打标签的日期时间、附注信息,然后显示具体的提交信息。
轻量标签:
轻量标签本质上是将提交校验和 存储到一个文件中——没有保存任何其他信息。 创建轻量标签,不需要使用 -a
、-s
或 -m
选项,只需要提供标签名字:
$ git tag v1.0.1
这时,如果运行 git show
,你不会看到额外的标签信息。 命令只会显示出提交信息:
$ git show -q v1.0.1
commit 6680bd40434821abf3e29045593629d4c9fddb15 (HEAD -> master, tag: v1.0.1, tag: v1.0)
Author: hahaha
Date: Sun Sep 27 12:58:55 2020 +0800
modify google.txt add google play
后期打标签
git也可以对过去的提交打标签。假如提交历史是这样的:
$ git log --oneline
6680bd4 (HEAD -> master, tag: v1.0.1, tag: v1.0) modify google.txt add google play
0b1cde0 readme.txt version 3.0
4b45669 readme.txt version 2.0
d3c72dd readme.txt version 1.0
73d5592 modify google.txt and add file readme.txt
6a1006a rename app.txt -> application.txt
......
假设现在想在readme.txt version 1.0
这次提交上打个标签,那么就需要在命令的末尾指定提交的校验和(或部分校验和):
$ git tag -a v1.0-release d3c72dd -m '后期打标签,释放1.0版本'
$ git tag
v1.0
v1.0-release
v1.0.1
$ git show -q v1.0-release
tag v1.0-release
Tagger: hahaha
Date: Sun Sep 27 14:31:55 2020 +0800
后期打标签,释放1.0版本
commit d3c72dd5ba02000c359d3b7b524250f42d3fade5 (tag: v1.0-release)
Author: hahaha
Date: Sat Sep 26 16:56:55 2020 +0800
readme.txt version 1.0
可以看到你已经在那次提交上打上标签了。
共享(推送)标签
默认情况下,git push
命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样——你可以运行 git push origin
。
# 在之前讲远程仓库时,我们在最后把远程仓库移除了,现在我们先添加上
$ git remote add origin https://github.com/tiangoubot/learngit.git
# 共享(推送)标签到远程仓库
$ git push origin v1.0-release
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 201 bytes | 50.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/tiangoubot/learngit.git
* [new tag] v1.0-release -> v1.0-release
如果想要一次性推送很多标签,也可以使用带有 --tags
选项的 git push
命令。 这将会把所有不在远程仓库服务器上的标签全部传送到那里。
$ git push origin --tags
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 160 bytes | 160.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/tiangoubot/learngit.git
* [new tag] v1.0 -> v1.0
* [new tag] v1.0.1 -> v1.0.1
现在,当其他人从仓库中克隆或拉取,他们也能得到你的那些标签。
删除标签
删除掉你本地仓库上的标签,可以使用命令 git tag -d
。 例如,可以使用以下命令删除一个轻量标签:
$ git tag -d v1.0.1
Deleted tag 'v1.0.1' (was 6680bd4)
注意:上述命令并不会从任何远程仓库中移除这个标签,你必须使用下面的方式来更新你的远程仓库。
-
方式一:
$ git push origin :refs/tags/v1.0.1 To https://github.com/tiangoubot/learngit.git - [deleted] v1.0.1
上面这种操作的含义是,将冒号前面的空值推送到远程标签名,从而高效地删除它。
-
方式二(更直观一点):
$ git push origin --delete v1.0 To https://github.com/tiangoubot/learngit.git - [deleted] v1.0
检出标签
我还没弄明白,先空着,以后搞清楚了再来更新!
别名(了解)
git 旧版本并不会在你输入部分命令时自动补全你想要的命令,如果不想每次都输入完整的git命令,可以通过 git config
文件来轻松地为每一个命令设置一个别名。 这里有一些例子你可以试试:
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
新版本的git有自动补全命令的功能,建议比较长的命令可以使用别名,比如查看提交历史的。
更多的信息,请查看git官网