介紹完分支後,這篇來講解「標籤」吧!
標籤在日常生活中可以解釋成標示簡單訊息的小牌子,而在學習階段,應該也有使用過標籤來做筆記,幫助我們快速找到我們想看的那一頁吧?
在 Git 的世界也一樣,「標籤(tag)」會幫助我們指向某個 Commit 物件唷!
這句話是不是好像在分支那裡也有聽過,兩個是相同的東西嗎?以下就來慢慢說明標籤是什麼吧!
跟分支一樣標籤也會指向某個 Commit ,但是並不會像分支一樣隨著 Commit 移動。因此,兩者之間最大的差異在於:分支會隨著 Commit 移動,而標籤則是固定留在某個 Commit 上。
常用時機:標記某個版本號碼,例如:v1.0
、 v2.0
、v1.0.1
、v3.7.0-beta.3
因為標籤不會隨著 Commit 推新而移動,因此在開發軟體時常利用這個特質來標記某次的 Commit 賦予它一個版本註解。
輕量標籤(lightweight tag)
$ git tag [標籤名稱] [指定 Commit 的 SHA-1 值]
可以看作是一個不會移動的分支,只會指向一個特定的 Commit 物件。
不會額外紀錄資訊。
使用時機|只想要一個暫時的標籤的時候
附註標籤 (annotated tag)
—> -a
參數
$ git tag [標籤名稱] [指定 Commit 的 SHA-1 值] -a -m[輸入訊息參數]
顧名思義就是會帶著註解的標籤。
在 Git 的資料庫會儲存成完整的物件,物件會被計算效驗碼(checksummed)。
包含:
建立標籤的人的名字、電子郵件和建立日期
紀錄一個標籤訊息(tagging message)
可以簽署及透過 GNU Privacy Guard (GPG) 驗證。
使用時機|附註軟體版號時、紀錄這張標籤的資訊時。
👉 因此通常建議使用附註標籤,如此一來可以保留跟這個標籤有關的所有資訊
共同點:
都是一個 40 字元的 SHA-1 值,指向某個地方。
皆以檔案方式存在 .git/refs/tags
目錄下。
相異點:
新增標籤
新增 輕量標籤
(lightweight tag):
$ git tag [標籤名稱] # 新增一個標籤
如果沒有指定哪個 Commit 時,Git 會自動指向最新的 Commit。
同時也會在 .git/refs/tags
目錄下以檔案型態儲存。
假設今天是要在某個 Commit 上貼上標籤,那麼可以先透過查詢得知 Commit 的版本識別碼後,執行新增標籤指令。
$ git log --oneline # 查詢紀錄
$ git tag [標籤名稱] [ Commit 版本識別碼] # 在特定的 Commit 上貼上標籤
結果出來我有三個 Commit,其中可以看到最新的 Commit (dba939f) 已經被貼上 first_tag 標籤,是因為剛剛的指令沒有指定特定的 Commit 而自動貼在最新一次的 Commit。
而現在我想針對 4f18d8b 這個 Commit 貼上標籤,那麼可以執行 git tag [標籤名稱] [ Commit 版本識別碼]
來完成。
輸入好後可以再次使用 git log --oneline
指令看看是否有成功貼上標籤。
成功貼上啦!同時在資料夾中也可以看到 second_tag 的檔案
新增 附註標籤
(annotated tag):
$ git tag [標籤名稱] [ Commit 版本識別碼] -a -m"輸入訊息參數" # 新增一個帶有附註資料的標籤
-a
參數 ( annotated 備註 / 註解)- 即是請 GIt 幫你建立一個附註標籤
-m
參數 - 紀錄訊息(如果沒有加上 -m
參數,可能會跳出 Vim 編輯器)
假設我要在 e8a31c0
這個 Commit 上加上附註標籤,可透過以下指令執行。
$ git tag third_tag e8a31c0 -a -m"example_tag" # 在 e8a31c0 這個 Commit 上加上 third_tag 標籤
使用 git log --oneline
指令查詢後結果如下。
查詢標籤
$ git tag # 查詢標籤
輸入指令後就可以知道你目前有哪些標籤囉!
查看標籤的差別
$ git show [標籤名稱] # 查看標籤內容
可以使用 git show
指令來查看標籤內的資料,由此我們可以觀察輕量標籤與附註標籤的差異。
$ git show second_tag third_tag # 查看 second_tag 與 third_tag 這兩支標籤。
刪除標籤
$ git tag -d [標籤名稱] # 刪除特定標籤
-d
參數即為 delete 的意思。
如果今天你想移除某個 Commit 上的標籤,那麼就可以透過這個指令達成。假設今天我不想要留下 second_tag 這個標籤,透過以下指令執行看看:
$ git tag -d second_tag # 刪除 second_tag 標籤
輸入指令後按下 Enter 執行,便會回饋訊息告訴說我們已經刪除這隻標籤了。
也可以使用 git log --oneline
確認是否真的移除掉了。
可以發現 4f18d8d
這隻 Commit 本來的 second_tag
標籤已不在上面了。
介紹完各種關於標籤的內容與指令後,讓我們再想想分支與標籤:
分支跟標籤有什麼不一樣呢? 🤔
上面有稍微提到,分支與標籤最大的差異就是
⚠️分支會隨著 Commit 移動,而標籤則是固定留在某個 Commit 上。⚠️
分支與標籤的
相同點:
相異點: