像其他版本控制系統(tǒng)一樣射窒,Git 可以給歷史中的某一個提交點(diǎn)打上標(biāo)簽,以示重要将塑。 比如功能開發(fā)完成后會使用這個功能來標(biāo)記發(fā)布節(jié)點(diǎn)(如 v1.0 等)脉顿。本篇,就介紹下如何創(chuàng)建点寥、刪除標(biāo)簽等操作艾疟。
Tag 會指向一個 commit,就像一個分支的引用敢辩,但是不會變化(永遠(yuǎn)都指向同一個 commit蔽莱,僅僅提供了一個更加友好的名字)
創(chuàng)建標(biāo)簽
Git 標(biāo)簽分為兩種類型:輕量標(biāo)簽(lightweight)與附注標(biāo)簽(annotated)
- 輕量標(biāo)簽:指向提交對象的引用(就像一個獨(dú)立的分支)
- 附注標(biāo)簽:倉庫中一個獨(dú)立的對象,還可以查看標(biāo)簽的信息(推薦使用)
標(biāo)簽的信息:標(biāo)簽的名字责鳍、郵箱地址和日期碾褂、標(biāo)簽說明等。
輕量標(biāo)簽
輕量標(biāo)簽本質(zhì)上是將提交校驗(yàn)和存儲到一個文件中 —— 沒有保存任何其他信息历葛。
創(chuàng)建輕量標(biāo)簽正塌,不需要傳遞參數(shù),直接指定標(biāo)簽名即可 git tag <tagname>
如:git tag v1.0
附注標(biāo)簽
在 Git 中創(chuàng)建一個附注標(biāo)簽恤溶,需添加參數(shù)
git tag -a <tagname> -m <message>
-
-a
即 annotated 的縮寫乓诽,指定標(biāo)簽類型,后面跟上標(biāo)簽名 -
-m
選型指定了標(biāo)簽的說明咒程,如果沒有給出該選項(xiàng)鸠天,Git 會啟動文本編輯器供你輸入標(biāo)簽說明。
打完標(biāo)簽之后帐姻,查看日志也能看到所打標(biāo)簽
列出標(biāo)簽
在 Git 中列出已有的標(biāo)簽是非常簡單直觀的稠集。 只需要輸入 git tag
即可
這個命令以字母順序列出標(biāo)簽,但是它們出現(xiàn)的順序并不重要饥瓷。
Git 也支持列出符合特定模式的標(biāo)簽
例如剥纷,如果只關(guān)心對 0.x,可以運(yùn)行:git tag -l 'v0.*'
這里支持 windows系統(tǒng)命令行中存在的最簡單的正則表達(dá)式
- * 任意長度的字符串
- 呢铆?長度為1的任意字符串
查看標(biāo)簽
通過使用 git show <tagname>
命令可以看到標(biāo)簽信息與對應(yīng)的提交信息:
- 使用附注標(biāo)簽(exp:tag v0.2) 輸出顯示了打標(biāo)簽者的信息晦鞋、打標(biāo)簽的日期時間、附注信息,然后顯示具體的提交信息
-
使用輕量標(biāo)簽(exp:tag v0.1)不會看到額外的標(biāo)簽信息
補(bǔ)打標(biāo)簽
前面的打標(biāo)簽方式悠垛,都針對當(dāng)前提交處线定,Git 也支持對過去的提交打標(biāo)簽。 要在那個提交上打標(biāo)簽确买,只需要在命令的末尾指定提交commitid即可
- 輕量標(biāo)簽
git tag <tagname> <commitid>
- 附注標(biāo)簽
git tag -a <tagname> -m <message> <commitid>
現(xiàn)在斤讥,假設(shè)在 “feat_6 modify ”處, alpha版本 時你忘記給項(xiàng)目打標(biāo)簽拇惋,那么可以補(bǔ)打標(biāo)簽
git tag -a v0.1_alpha -m "release aplha 0.1" 35b473
可以看到已經(jīng)在那次提交上打上標(biāo)簽了:
分享標(biāo)簽(推送到遠(yuǎn)程)
默認(rèn)情況下周偎,git push
并不會把標(biāo)簽推送到遠(yuǎn)端服務(wù)器上,只有通過顯式命令才能分享標(biāo)簽到遠(yuǎn)端倉庫撑帖。其命令格式如同推送分支,執(zhí)行 git push origin <tagname>
即可:
在 GitHub 也看到有一個標(biāo)簽
點(diǎn)進(jìn)去可看到標(biāo)簽詳情
如果要一次推送所有(本地新增的)標(biāo)簽上去澳眷,可以使用 --tags
選項(xiàng):
git push origin --tags
那么遠(yuǎn)程端會同步所有未 push 過的標(biāo)簽胡嘿。
現(xiàn)在,當(dāng)其他人從倉庫中 clone 或者 pull钳踊,也能看到這些遠(yuǎn)程標(biāo)簽
刪除標(biāo)簽
要刪除掉你本地倉庫上的標(biāo)簽衷敌,可以使用命令 git tag -d <tagname>
。例如拓瞪,可以使用下面的命令刪除掉一個標(biāo)簽:
需要注意上述命令并不會遠(yuǎn)程倉庫中移除這個標(biāo)簽义郑,你必須使用 git push <remote> :refs/tags/<tagname> 來更新你的遠(yuǎn)程倉庫:
刪除遠(yuǎn)程倉庫中的 v0.1 標(biāo)簽 git push origin :refs/tags/v0.1
這里的<remote> 是origin刹泄,其實(shí)每個本地倉庫也可以有多個遠(yuǎn)程倉庫的
檢出標(biāo)簽(切換標(biāo)簽)
如果你想查看某個標(biāo)簽所指向的文件版本,可以使用 git checkout <tagname>
命令,Git 會檢出指定版本戒洼,但是并沒有在分支內(nèi)。這叫做一個 "detacthed HEAD"拱绑,會使倉庫處于“分離頭指針”狀態(tài)赋元,這意味著 HEAD 文直接指向一個提交,而不是一個符號引用泰演。
我們從 v0.1_alpha 檢出 git chckout v0.1_alpha
當(dāng)前從標(biāo)簽 v0.1_alpha 檢出的并不是一個新的分支呻拌,而是一個分離頭指針狀態(tài)
在 “分離頭指針” 狀態(tài)下,如果做了某些更改然后提交它們睦焕,標(biāo)簽不會發(fā)生變化藐握,但你的新提交將不屬于任何分支,并且將無法訪問垃喊,除非確切的提交哈希猾普。因此,如果你需要進(jìn)行更改——比如說你正在修復(fù)舊版本的錯誤——這通常需要創(chuàng)建一個新分支:
git checkout -b <new_branch>
當(dāng)然缔御,如果在這之后又進(jìn)行了一次提交抬闷,這個分支會因?yàn)檫@個改動向前移動,新分支就會和 v0.1_alpha 標(biāo)簽稍微有些不同。
參考理解:我自己會將 detacthed HEAD state 理解成一個灰色地帶笤成,能夠單獨(dú)檢出评架,但是做的事情無法保存,最好回到分支上處理
回顧總結(jié)
本篇介紹了 tag 命令的使用炕泳,良好的使用 tag 能夠更直觀的進(jìn)行版本管理
創(chuàng)建標(biāo)簽
-
git tag <tagname>
創(chuàng)建輕量標(biāo)簽 -
git tag -a <tagname> -m <message>
創(chuàng)建附注標(biāo)簽(推薦)
列出標(biāo)簽
-
git tag [-l]
列出標(biāo)簽 -
git tag -l [tagname]
列出指定模式的標(biāo)簽纵诞,可以用簡單的正則,如 v0.*
查看標(biāo)簽
-
git show <tagname>
查看指定標(biāo)簽
補(bǔ)打標(biāo)簽
-
git tag <tagname> <commitid>
補(bǔ)打輕量標(biāo)簽 -
git tag -a <tagname> -m <message> <commitid>
補(bǔ)打附注標(biāo)簽
分享標(biāo)簽(遠(yuǎn)程標(biāo)簽)
-
git push origin <tagname>
本地標(biāo)簽推送至遠(yuǎn)端 -
git push origin --tags
推送所有的本地標(biāo)簽至遠(yuǎn)端
刪除標(biāo)簽
-
git tag -d <tagname>
刪除本地標(biāo)簽 -
git push <remote> :refs/tags/<tagname>
刪除遠(yuǎn)端標(biāo)簽
檢出標(biāo)簽
-
git checkout <tagname>
但不建議直接在檢出后環(huán)境(分離頭指針狀態(tài))更新培遵,通常會創(chuàng)建新分支來處理浙芙,但 tag 的指向不會變化
系列文章傳送門
Git 入門系列(一)- Git 概念/安裝/基本操作/遠(yuǎn)程推送更新
Git 入門系列(二)- 修改管理 / 撤銷操作 / 命令及區(qū)間關(guān)系
Git 入門系列(三)- 分支(上)創(chuàng)建與切換 / 合并 / 查看 / 刪除
Git 入門系列(四)- 分支(下)合并解決沖突 / 遠(yuǎn)程分支
Git 入門系列(五)- stash 貯藏
Git 入門系列(六)- 標(biāo)簽 tag
Git 入門系列(七)- 可視化 Git 管理工具
Git 入門系列(八) - FAQ
歡迎關(guān)注個人公眾號,【程序媛春哥的手記】