Git 入門系列(六)- 標(biāo)簽 tag

像其他版本控制系統(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)注個人公眾號,【程序媛春哥的手記】


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末籽腕,一起剝皮案震驚了整個濱河市嗡呼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌皇耗,老刑警劉巖南窗,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異郎楼,居然都是意外死亡万伤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進(jìn)店門呜袁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敌买,“玉大人,你說我怎么就攤上這事阶界『缗ィ” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵荐操,是天一觀的道長芜抒。 經(jīng)常有香客問我,道長托启,這世上最難降的妖魔是什么宅倒? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮屯耸,結(jié)果婚禮上拐迁,老公的妹妹穿的比我還像新娘。我一直安慰自己疗绣,他們只是感情好线召,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著多矮,像睡著了一般缓淹。 火紅的嫁衣襯著肌膚如雪哈打。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天讯壶,我揣著相機(jī)與錄音料仗,去河邊找鬼。 笑死伏蚊,一個胖子當(dāng)著我的面吹牛立轧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躏吊,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼氛改,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了比伏?” 一聲冷哼從身側(cè)響起胜卤,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎赁项,沒想到半個月后瑰艘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肤舞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了均蜜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片李剖。...
    茶點(diǎn)故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖囤耳,靈堂內(nèi)的尸體忽然破棺而出篙顺,到底是詐尸還是另有隱情,我是刑警寧澤充择,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布德玫,位于F島的核電站,受9級特大地震影響椎麦,放射性物質(zhì)發(fā)生泄漏宰僧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一观挎、第九天 我趴在偏房一處隱蔽的房頂上張望琴儿。 院中可真熱鬧,春花似錦嘁捷、人聲如沸造成。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晒屎。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鼓鲁,已是汗流浹背蕴轨。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坐桩,地道東北人尺棋。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像绵跷,于是被迫代替她去往敵國和親膘螟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評論 2 351