八、Git标签与别名

标签,顾名思义就是做标记,在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
image-20200927143930833.png

如果想要一次性推送很多标签,也可以使用带有 --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官网

你可能感兴趣的:(八、Git标签与别名)