[教學] git-28 標籤 - 討論區

[教學] git-28 標籤

文章瀏覽次數 1019 文章回覆數 0

特種兵

特種兵圖像(預設)

2020-04-16 10:52:02

From:1.161.129.204

我們可以在 commit 上貼標籤,標籤有點類似分支,但又不太一樣。

標籤是針對該 commit 而言,貼在 commit 上面,可以分成兩種標籤,

輕量標籤

輕量標籤就是直接把標籤貼在 commit 上面:

# 看一下前 3 筆紀錄
$ git log --oneline -3                                                          
 762ece1 (HEAD -> master) 複製一個 test.py 蓋掉原本的同名檔案                    
 580aaf0 新增 qqoo.txt                                                           
 5bbbe37 刪除 ooqq.txt                                                           

# 我們把標籤貼在 580aaf0 上面並且給他一個名字「新標籤」
$ git tag  '新標籤' 580aaf0                                                               

# 看一下貼上標籤長怎樣
$ git log --oneline -3                                                          
 762ece1 (HEAD -> master) 複製一個 test.py 蓋掉原本的同名檔案                    
 580aaf0 (tag: 新標籤) 新增 qqoo.txt                                             
 5bbbe37 刪除 ooqq.txt                                                           

# 如果不指定 commit 就會貼在當前最新的 commit 上 
# 一個 commit 可以貼很多標籤
# 我們先把標籤移除
$ git tag -d '新標籤'                                                           
 Deleted tag '新標籤' (was 580aaf0)                                              

附註標籤

附註標籤就是可以加註解的標籤,通常比較推薦這個,因為可以寫入一些完整的資訊,

就像我們在寫 commit 那樣:

$ git tag 'V2.0' 580aaf0 -a -m '新增打怪功能並發佈'                             

$ git log --oneline -3                                                          
 762ece1 (HEAD -> master) 複製一個 test.py 蓋掉原本的同名檔案                    
 580aaf0 (tag: V2.0) 新增 qqoo.txt                                               
 5bbbe37 刪除 ooqq.txt                                                           

# 要使用 show 才看得到詳細資訊
$ git show 'V2.0'                                                               
 tag V2.0                                                                        
 Tagger: Logo Kuo <logo@forblind.org.tw>                                         
 Date:   Sun Apr 12 10:36:49 2020 +0800                                          

 新增打怪功能並發佈                                                              

 commit 580aaf0b6cf52bdfbf70ee7bddf633d3cf18c73e (tag: V2.0)                     
 Author: Logo Kuo <logo@forblind.org.tw>                                         
 Date:   Sat Apr 11 22:13:35 2020 +0800                                          

     新增 qqoo.txt                                                               

 diff --git a/qqoo.txt b/qqoo.txt                                                
 new file mode 100644                                                            
 index 0000000..e69de29                                                          

除了原本的 commit 資訊,上面還多了 tag 標註者與附註內容。

兩種標籤的刪除方式都一樣。

差異

這兩種標籤除了一個有附註,另一個沒有以外,

在架構上,輕量標籤是指向 commit 而附註標籤是先指向 tag 物件,

然後 tag 物件才指向 commit 本身。

用途

標籤通常用於呈現額外需要補充的資訊,

例如我做了 5 個 commit 後,在第 6 個 commit 對外發佈正式版本,

於是我就可以貼一張標籤在第 6 個 commit 標示一下發佈的版號、更新內容等,

這樣下一次我再發佈下個版本就知道上一次發佈的內容與版號等資訊。

commit 與標籤

有做出 commit 才會有標籤,不然標籤要貼到哪裡?

commit 的資訊是撰寫這次做了哪些事情或動作,

標籤是對這個 commit 的額外補充或針對整個專案的角度做說明。

分支與標籤

從架構面來說,分支是動態的,HEAD 會隨著新增的 commit 而移動,但標籤是靜態的,就是跟著該 commit 而已。

因為分支是動態的,所以我們有切換分支的需求,標籤就是用來看的而已。

最後,刪除標籤並不會影響到原本的 commit 就只是撕掉一張補充資訊的貼紙而已,

但刪除分支就不是那麼單純囉。