八、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 <orcale.io@gmail.com>
Date:   Sun Sep 27 14:21:53 2020 +0800

test version 1.0

commit 6680bd40434821abf3e29045593629d4c9fddb15 (HEAD -> master, tag: v1.0)
Author: hahaha <orcale.io@gmail.com>
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 <orcale.io@gmail.com>
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 <orcale.io@gmail.com>
Date:   Sun Sep 27 14:31:55 2020 +0800

后期打标签,释放1.0版本

commit d3c72dd5ba02000c359d3b7b524250f42d3fade5 (tag: v1.0-release)
Author: hahaha <orcale.io@gmail.com>
Date:   Sat Sep 26 16:56:55 2020 +0800

    readme.txt version 1.0

可以看到你已经在那次提交上打上标签了。

共享(推送)标签

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样——你可以运行 git push origin <tagname>

# 在之前讲远程仓库时,我们在最后把远程仓库移除了,现在我们先添加上
$ 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 <tagname>。 例如,可以使用以下命令删除一个轻量标签:

$ 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官网

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352