【學(xué)了就忘】Git操作 — 53.標簽tag(二)

5沙廉、共享標簽

默認情況下拘荡,git push 命令并不會傳送標簽到遠程倉庫服務(wù)器上。

在創(chuàng)建完標簽后撬陵,你必須顯式地(手動)推送標簽到遠程服務(wù)器上珊皿。

需要將標簽推送到遠程版本庫作為一個發(fā)行版本网缝,可以通過以下兩種方式:

(1)推送本地的指定標簽

這個過程就像共享遠程分支一樣,你可以執(zhí)行命令: git push origin <tagname>亮隙。

$ git push origin v1.5
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
 * [new tag]         v1.5 -> v1.5

(2)推送本地所有為推送的標簽

如果想要一次性推送很多標簽途凫,也可以使用帶有 --tags 選項的 git push 命令。

這將會把所有不在遠程倉庫服務(wù)器上的標簽全部推送過去溢吻。

$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
 * [new tag]         v1.4 -> v1.4
 * [new tag]         v1.4-lw -> v1.4-lw

當(dāng)然其他人從倉庫中克隆或拉取维费,他們也能得到你的那些標簽。

說明:

  • git push 推送兩種標簽使用 git push <remote> --tags 命令(remote:遠程倉庫)促王。
  • 推送標簽并不會區(qū)分輕量標簽和附注標簽犀盟, 沒有選項能夠讓你只選擇一種標簽進行推送。

(3)查看結(jié)果

登錄GitHub并打開遠程版本庫頁面蝇狼,在release中可以查看推送到遠程庫中的標簽阅畴,即發(fā)行版本。

其他用戶在更新本地版本庫時迅耘,同時會將標簽一并更新贱枣,然后可以在本地指定標簽版本上,作一個新的分支進行開發(fā)颤专,開發(fā)完成后再合并到主要分支上纽哥,最后將該分支刪除。

6栖秕、刪除標簽

(1)刪除本地標簽

要刪除掉本地倉庫上的標簽春塌,可以使用命令 git tag -d <tagname>

例如簇捍,可以使用以下命令刪除一個輕量標簽:

$ git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add)

注意上述命令并不會從任何遠程倉庫中移除這個標簽只壳。

(2)刪除遠程標簽

你必須用命令: git push <remote> :refs/tags/<tagname> 來更新你的遠程倉庫。

提示:若要刪除遠程庫中的標簽暑塑,首先要刪除本地庫中的該標簽吼句,然后再運行上面的命令。

第一種方式是 git push <remote遠程庫> :refs/tags/<tagname>

$ git push origin :refs/tags/v1.4-lw
To /git@github.com:schacon/simplegit.git
 - [deleted]         v1.4-lw

上面這種操作的含義是梯投,將冒號前面的空值推送到遠程標簽名命辖,從而高效地刪除它。

第二種更直觀的刪除遠程標簽的方式是:

$ git push origin遠程庫 --delete <tagname>

7分蓖、修改標簽指定提交的代碼

軟件版本一旦被指定,即標簽一旦與某一commit-id綁定尔许,那么這個版本(提交)的代碼還能修改嗎么鹤?

  • 若將master分支回退到該commit-id,然后再修改代碼味廊,修改完成后再提交蒸甜,我們會發(fā)現(xiàn)該提交代碼修改過了棠耕,但該標簽綁定的commit-id并沒有發(fā)生變化,即該軟件版本(標簽)指向的代碼仍未修改柠新。(也就是標簽指向的提交沒有改變)

  • 當(dāng)然窍荧,此時我們可以將該標簽刪除,然后再定義一個同名標簽恨憎,與修改過代碼的提交進行綁定蕊退,這樣也是可以的。

但是如上操作存在一個巨大的風(fēng)險憔恳,我們修改過的代碼是master主分支上的瓤荔,一旦修改過的代碼出現(xiàn)問題,將可以導(dǎo)致整個代碼出問題钥组。所以输硝,我們一般不會修改master主分支上的代碼。

那應(yīng)該怎么辦程梦?

  • Git將標簽定義為與分支同級別的概念点把,它不僅是一個提交的別名。
  • Git允許程序員使用分支切換命令git checkout 屿附,將代碼轉(zhuǎn)向標簽所指定的版本郎逃。

小示例:

# 1.查看當(dāng)前版本庫分支
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git tag
v1.0
v2.0

# 2.切換到v1.0標簽上
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learning_github (master)
$ git checkout v1.0
Note: switching to 'v1.0'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 69fc420 第二次提交,添加v2版內(nèi)容

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learning_github ((v1.0))
$

如上拿撩,命令執(zhí)行完畢衣厘,系統(tǒng)給出了很多的提示,該提示的總體意思為:當(dāng)前處于“分離頭指針”狀態(tài)压恒,在該狀態(tài)下用戶的任何修改與提交對任何的分支都沒有影響(言外之意是:其修改將不會被保留)影暴。若想要保留修改,則可以通過git checkout -b命令探赫,創(chuàng)建一個新的分支型宙。

這里特別要注意一點,就是最后一行命令提示符末尾的((v1.0))伦吠,說明此時HEAD指針妆兑,指向了v1.0標簽。

繼續(xù)執(zhí)行命令:

# 3.執(zhí)行g(shù)it checkout -b 命令毛仪,是新的提交有分支指向
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learning_github ((v1.0))
$ git checkout -b newbranch
Switched to a new branch 'newbranch'

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learning_github (newbranch)
$

我們可以看到HEAD指針由(v1.0)標簽指向了newbranch分支上搁嗓。在該新分支上再進行修改提交,然后再合并到master分支箱靴,最后再將該分支刪除腺逛,此時創(chuàng)建的分支名稱可以隨意。

當(dāng)newbranch分支合并到master分支后衡怀,仍需要刪除原標簽棍矛,然后再與新的commit-id綁定安疗。所以,生產(chǎn)環(huán)境下够委,一旦標簽定義完成荐类,就不會對標簽進行刪除再綁定。而是會再定義一個新的標簽與新的提交綁定茁帽。

8玉罐、標簽在.git目錄中的位置

無論是輕量標簽還是附注標簽,他們都會存在在.git/refs/tags目錄中脐雪。

# 1.查看.git/refs/tags目錄
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ ll .git/refs/tags/
total 2
-rw-r--r-- 1 L 197121 41  4月 18 17:12 v1.0
-rw-r--r-- 1 L 197121 41  4月 19 20:46 v2.0

# 2.查看v1.0標簽的內(nèi)容
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git cat-file tag v1.0
object b97ccfd5f3e98c12ab9c0fb4ca4b308e6805f7ed
type commit
tag v1.0
tagger sun_wk <sun_wk@126.com> 1618737173 +0800

v1.0 里程碑

# 3.查看v1.0標簽內(nèi)容中object的類型
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git cat-file -t  b97ccfd5f3e98c12
commit
# 我們可以看到object對象的類型是commit對象厌小,
# 是一個提交,所以索引的是一個提交战秋。

# 4.查看V1.0標簽文件中的內(nèi)容璧亚,可以看到也是一個對象的索引
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ cat .git/refs/tags/v1.0
e086427dfe88d8cd370d2f94eaf8610c169a3333

# 5.查看這個對象的類型
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git cat-file -t e086427
tag
# 我們可以查看該對象是一個標簽對象。

# 6.我們也可以通過tag對象的索引值脂信,查看內(nèi)容癣蟋,
# 和上邊git cat-file tag v1.0命令顯示的內(nèi)容是一樣的。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git cat-file -p e086427
object b97ccfd5f3e98c12ab9c0fb4ca4b308e6805f7ed
type commit
tag v1.0
tagger sun_wk <sun_wk@126.com> 1618737173 +0800

v1.0 里程碑

總結(jié)來說:

  1. Git中的標簽狰闪,都會以文件的形式存儲在.git/refs/tags目錄中疯搅。
  2. 文件中記錄的是tag標簽的校驗和(索引值)。
  3. 通過索引值或者標簽名可以查看該tag對象的內(nèi)容埋泵。
  4. tag對象的內(nèi)容就包括他指向的commit幔欧。其實tag對象就是對commit對象的一個封裝。

9丽声、本文中所使用到的命令

  • git tag:查看版本庫中的標簽列表礁蔗。
  • git tag -l "v1.8.5*":查看版本庫中,可匹配的標簽列表雁社。
  • git tag -a 標簽名 -m '說明信息':當(dāng)前分支最新一次提交打標簽浴井。
  • git tag -a 標簽名 commit-id -m '說明信息':為之前的提交打標簽。
  • git tag 標簽名:創(chuàng)建輕量標簽霉撵。
  • git push 遠程倉庫名 標簽名:推送標簽到遠程倉庫磺浙。
  • git push 遠程倉庫名 --tags:推送所有標簽到遠程倉庫。
  • git tag -d 標簽名 :刪除本地版本庫中的標簽徒坡。
  • git show 標簽名:擦看標簽的具體信息撕氧。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市喇完,隨后出現(xiàn)的幾起案子呵曹,更是在濱河造成了極大的恐慌,老刑警劉巖何暮,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奄喂,死亡現(xiàn)場離奇詭異,居然都是意外死亡海洼,警方通過查閱死者的電腦和手機跨新,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坏逢,“玉大人域帐,你說我怎么就攤上這事∈钦” “怎么了肖揣?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長浮入。 經(jīng)常有香客問我龙优,道長,這世上最難降的妖魔是什么事秀? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任彤断,我火速辦了婚禮,結(jié)果婚禮上易迹,老公的妹妹穿的比我還像新娘宰衙。我一直安慰自己,他們只是感情好睹欲,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布供炼。 她就那樣靜靜地躺著,像睡著了一般窘疮。 火紅的嫁衣襯著肌膚如雪袋哼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天考余,我揣著相機與錄音,去河邊找鬼楚堤。 笑死疫蔓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的身冬。 我是一名探鬼主播酥筝,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼丧凤!你這毒婦竟也來了浩螺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤农渊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后格了,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盛末,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡檐嚣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年嚎京,在試婚紗的時候發(fā)現(xiàn)自己被綠了煞茫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚓曼。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡辟躏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情概页,我是刑警寧澤技掏,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響龄毡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疾渴,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧垫桂,春花似錦、人聲如沸后控。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矾缓。三九已至嗜闻,卻和暖如春檐束,著一層夾襖步出監(jiān)牢的瞬間被丧,已是汗流浹背甥桂。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工柿究, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人黄选。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓蝇摸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親办陷。 傳聞我的和親對象是個殘疾皇子貌夕,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容