標(biāo)簽肚逸,顧名思義就是做標(biāo)記爷辙,在git中彬坏,一般用與標(biāo)記某個(gè)發(fā)布節(jié)點(diǎn)。
git 支持兩種標(biāo)簽:輕量標(biāo)簽(lightweight)與附注標(biāo)簽(annotated)膝晾。
輕量標(biāo)簽:很像一個(gè)不會(huì)改變的分支——它只是某個(gè)特定提交的引用苍鲜,不會(huì)存儲(chǔ)任何信息。
附注標(biāo)簽:是存儲(chǔ)在 Git 數(shù)據(jù)庫(kù)中的一個(gè)完整對(duì)象玷犹, 它們是可以被校驗(yàn)的,其中包含打標(biāo)簽者的名字洒疚、電子郵件地址歹颓、日期時(shí)間, 此外還有一個(gè)標(biāo)簽信息油湖,并且可以使用 GNU Privacy Guard (GPG)簽名并驗(yàn)證巍扛。
通常會(huì)建議創(chuàng)建附注標(biāo)簽,這樣你可以擁有以上所有信息乏德。但是如果你只是想用一個(gè)臨時(shí)的標(biāo)簽撤奸, 或者因?yàn)槟承┰虿幌胍4孢@些信息,那么也可以用輕量標(biāo)簽喊括。
列出標(biāo)簽
使用git tag
命令(可帶上可選的參數(shù)-l
或者-list
)
$ git tag
這個(gè)命令會(huì)以字母順序列出標(biāo)簽胧瓜,但不是很重要
如果對(duì)某個(gè)特定的版本號(hào)感興趣,可以使用下面的方式:
$ git tag -l "v1.8.5*" # 查看v1.8.5系列
創(chuàng)建標(biāo)簽
附注標(biāo)簽:
在 git 中創(chuàng)建附注標(biāo)簽十分簡(jiǎn)單郑什。 最簡(jiǎn)單的方式是當(dāng)你在運(yùn)行 tag
命令時(shí)指定 -a
選項(xiàng):
$ git tag -a v1.0 -m 'test version 1.0'
-m
選項(xiàng)指定了一條將會(huì)存儲(chǔ)在標(biāo)簽中的信息府喳。 如果沒(méi)有為附注標(biāo)簽指定一條信息,git 會(huì)啟動(dòng)編輯器要求你輸入信息蘑拯。
通過(guò)使用 git show
命令可以看到標(biāo)簽信息和與之對(duì)應(yīng)的提交信息:
$ 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
輸出顯示了打標(biāo)簽者的信息钝满、打標(biāo)簽的日期時(shí)間、附注信息申窘,然后顯示具體的提交信息弯蚜。
輕量標(biāo)簽:
輕量標(biāo)簽本質(zhì)上是將提交校驗(yàn)和 存儲(chǔ)到一個(gè)文件中——沒(méi)有保存任何其他信息。 創(chuàng)建輕量標(biāo)簽剃法,不需要使用 -a
碎捺、-s
或 -m
選項(xiàng),只需要提供標(biāo)簽名字:
$ git tag v1.0.1
這時(shí)贷洲,如果運(yùn)行 git show
牵寺,你不會(huì)看到額外的標(biāo)簽信息。 命令只會(huì)顯示出提交信息:
$ 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
后期打標(biāo)簽
git也可以對(duì)過(guò)去的提交打標(biāo)簽恩脂。假如提交歷史是這樣的:
$ 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
......
假設(shè)現(xiàn)在想在readme.txt version 1.0
這次提交上打個(gè)標(biāo)簽帽氓,那么就需要在命令的末尾指定提交的校驗(yàn)和(或部分校驗(yàn)和):
$ git tag -a v1.0-release d3c72dd -m '后期打標(biāo)簽,釋放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
后期打標(biāo)簽俩块,釋放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
可以看到你已經(jīng)在那次提交上打上標(biāo)簽了黎休。
共享(推送)標(biāo)簽
默認(rèn)情況下浓领,git push
命令并不會(huì)傳送標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器上。 在創(chuàng)建完標(biāo)簽后你必須顯式地推送標(biāo)簽到共享服務(wù)器上势腮。 這個(gè)過(guò)程就像共享遠(yuǎn)程分支一樣——你可以運(yùn)行 git push origin <tagname>
联贩。
# 在之前講遠(yuǎn)程倉(cāng)庫(kù)時(shí),我們?cè)谧詈蟀堰h(yuǎn)程倉(cāng)庫(kù)移除了捎拯,現(xiàn)在我們先添加上
$ git remote add origin https://github.com/tiangoubot/learngit.git
# 共享(推送)標(biāo)簽到遠(yuǎn)程倉(cāng)庫(kù)
$ 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
如果想要一次性推送很多標(biāo)簽泪幌,也可以使用帶有 --tags
選項(xiàng)的 git push
命令。 這將會(huì)把所有不在遠(yuǎn)程倉(cāng)庫(kù)服務(wù)器上的標(biāo)簽全部傳送到那里署照。
$ 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
現(xiàn)在祸泪,當(dāng)其他人從倉(cāng)庫(kù)中克隆或拉取,他們也能得到你的那些標(biāo)簽建芙。
刪除標(biāo)簽
刪除掉你本地倉(cāng)庫(kù)上的標(biāo)簽没隘,可以使用命令 git tag -d <tagname>
。 例如禁荸,可以使用以下命令刪除一個(gè)輕量標(biāo)簽:
$ git tag -d v1.0.1
Deleted tag 'v1.0.1' (was 6680bd4)
注意:上述命令并不會(huì)從任何遠(yuǎn)程倉(cāng)庫(kù)中移除這個(gè)標(biāo)簽右蒲,你必須使用下面的方式來(lái)更新你的遠(yuǎn)程倉(cāng)庫(kù)。
-
方式一:
$ git push origin :refs/tags/v1.0.1 To https://github.com/tiangoubot/learngit.git - [deleted] v1.0.1
上面這種操作的含義是赶熟,將冒號(hào)前面的空值推送到遠(yuǎn)程標(biāo)簽名瑰妄,從而高效地刪除它。
-
方式二(更直觀一點(diǎn)):
$ git push origin --delete v1.0 To https://github.com/tiangoubot/learngit.git - [deleted] v1.0
檢出標(biāo)簽
我還沒(méi)弄明白映砖,先空著翰撑,以后搞清楚了再來(lái)更新!
別名(了解)
git 舊版本并不會(huì)在你輸入部分命令時(shí)自動(dòng)補(bǔ)全你想要的命令啊央,如果不想每次都輸入完整的git命令眶诈,可以通過(guò) git config
文件來(lái)輕松地為每一個(gè)命令設(shè)置一個(gè)別名。 這里有一些例子你可以試試:
$ 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有自動(dòng)補(bǔ)全命令的功能瓜饥,建議比較長(zhǎng)的命令可以使用別名逝撬,比如查看提交歷史的。
更多的信息乓土,請(qǐng)查看git官網(wǎng)