在發(fā)布版本時(shí),我們通常先在版本庫打一個(gè)標(biāo)簽(tag),這樣,就唯一確定了打標(biāo)簽時(shí)刻的版本.將來無論什么時(shí)候,取某個(gè)標(biāo)簽的版本,就是把那個(gè)打標(biāo)簽的時(shí)刻的歷史版本取出來,所以標(biāo)簽也是版本庫的一個(gè)快照.
Git的標(biāo)簽雖然是版本庫的快照,但其實(shí)它就是指向某個(gè)commit的指針(跟分支很像對(duì)不對(duì)?但分支可以移動(dòng),標(biāo)簽不能移動(dòng)),所以,創(chuàng)建和刪除標(biāo)簽都是瞬間完成的.
Git有了commit,為什么還要引入tag呢?
因?yàn)閏ommit號(hào)是3b5819e...
一串亂七八糟的數(shù)字不好找.而tag可以根據(jù)需要任意命名,讓人非常容易記住,它跟某個(gè)commit
綁定在一起.
創(chuàng)建標(biāo)簽
在Git中打標(biāo)簽,首先,需要切換到需要打標(biāo)簽的分支上:
$ git branch
* dev
master
$ git checkout master
Switched to branch 'master'
然后,敲命令git tag <name>
就可以打一個(gè)標(biāo)簽:
$ git tag v1.0
可以用命令git tag
查看所有標(biāo)簽:
$ git tag
v1.0
默認(rèn)標(biāo)簽是打在最新提交的commit上的,有時(shí)候,如果忘了打標(biāo)簽,需要給之前的提交打上標(biāo)簽,怎么辦呢?
方法是找到歷史提交的commit id,然后打上就可以了:
$ git log --pretty=oneline --abbrev-commit
b95bbf0 conflict fixed
c2e47c0 & simple
89cdc59 AND simple
fae4e76 忽略不要的文件
e151f7e add README.md
3fafa4a remove test.txt
c291807 add test.txt
6d99443 boss
8b33073 git tracks changes
3557835 Revert "add aaa"
9b4fd89 add aaa
94bf088 append microService
8cf77e4 add code for theme
92b6075 add spring-boot sample
5ad5c1f add a readme file
比方說要對(duì)& simple
這次提交打標(biāo)簽,它對(duì)應(yīng)的commit id是c2e47c0
,敲入命令:
$git tag v0.8 c2e47c0
再用命令git tag
查看:
$ git tag
v0.8
v1.0
這里需要注意,標(biāo)簽不是按時(shí)間順序列出的,而是按字母排序的,可以用git show <tagname>
查看標(biāo)簽信息:
$ git show v0.8
commit c2e47c06db550e03b2c19ee5247b03d949a10541
Author: alan7c <chong_luo@kingdee.com>
Date: Fri Mar 17 17:42:44 2017 +0800
& simple
diff --git a/README.md b/README.md
index 342d90d..0a28620 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
# spring-boot-mongo
還可以創(chuàng)建帶有說明的標(biāo)簽,用-a
指定標(biāo)簽名,-m
指定說明的文字:
$ git tag -a v0.9 -m "version 0.9 master" b95bbf0
用命令git show <gitname>
可以看到說明文字:
$ git show v0.9
tag v0.9
Tagger: alan7c <chong_luo@kingdee.com>
Date: Mon Mar 27 16:29:13 2017 +0800
version 0.9 master
commit b95bbf0ac897b2d88fa4bcf0308913f624d566c7
Merge: c2e47c0 89cdc59
Author: alan7c <chong_luo@kingdee.com>
Date: Fri Mar 17 17:48:28 2017 +0800
conflict fixed
小結(jié)
- 命令
git tag <name>
用于創(chuàng)建一個(gè)標(biāo)簽,默認(rèn)為HEAD
,也可以指定一個(gè)commit id; -
git tag -a <tagname> -m "balabalalbala.." commit id
可以指定標(biāo)簽信息; - 命令
git tag
可以查看所有標(biāo)簽.
操作標(biāo)簽
如果標(biāo)簽打錯(cuò)了,也可以刪除標(biāo)簽:
$ git tag -d v0.8
Deleted tag 'v0.8' (was c2e47c0)
因?yàn)閯?chuàng)建的標(biāo)簽都是只存儲(chǔ)在本地,不會(huì)自動(dòng)推送到遠(yuǎn)程,所以打錯(cuò)的標(biāo)簽也可以在本地安全刪除.
如果要推送某個(gè)標(biāo)簽到遠(yuǎn)程,使用命令git push origin <tagname>
:
$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To git@github.alanluochong/spring-boot-test.git
* [new tag] v1.0 -> v1.0
或者一次性推送全部尚未推送到遠(yuǎn)程的本地標(biāo)簽:
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 554 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
* [new tag] v0.2 -> v0.2
* [new tag] v0.9 -> v0.9
如果標(biāo)簽已經(jīng)推送到遠(yuǎn)程,要?jiǎng)h除遠(yuǎn)程標(biāo)簽就麻煩一點(diǎn),但是格式如下:
$ git push origin :refs/tags/v0.9
To git@github.com:alanluochong/spring-mongo-test.git
- [deleted] v0.9
小結(jié)
- 命令
git push origin <tagname>
可以推送一個(gè)本地標(biāo)簽到遠(yuǎn)程; - 命令
git push origin --tags
可以推送全部未推送過的本地標(biāo)簽; - 命令
git tag -d <tagname>
可以刪除一個(gè)本地標(biāo)簽; - 命令
git push origin :refs/tags/<tagname>
可以刪除一個(gè)遠(yuǎn)程標(biāo)簽;