git tag

技術從未如此性感發表於2018-05-16

本文於2018年1月3號釋出在個人部落格中,因為個人部落格關閉,全部遷移到CSDN,以下是正文:


隨著時間的流逝,程式設計師一次又一次的往倉庫中提交程式碼,直到又一次提交完成之後,專案經理宣佈:“到此刻為止,我們1.0版本的開發完成了”

今天來說說git中跟版本釋出相關的特性:git tag。本文將按照如下流程進行講解:

  • 關於tag
  • 建立tag
  • 提交tag
  • 檢出tag
  • 刪除tag

關於tag

tag用來標記某個提交的重要性,可以用作版本釋出的標記。當把tag push到github,可以在release中看到:

這裡寫圖片描述

git中的tag有兩種:

  • 輕量級tag(lightweight),“一個輕量標籤很像一個不會改變的分支 – 它只是一個特定提交的引用”(引用自progit中文版)
  • 附註tag,“附註標籤是儲存在 Git 資料庫中的一個完整物件。 它們是可以被校驗的;其中包含打
    標籤者的名字、電子郵件地址、日期時間;還有一個標籤資訊;並且可以使用 GNU Privacy
    Guard (GPG)簽名與驗證”(引用自progit中文版)

“通常建議建立附註標籤,這樣你可以擁有以上所有資訊;但是
如果你只是想用一個臨時的標籤,或者因為某些原因不想要儲存那些資訊,輕量標籤也是可
用的”(引用自progit中文版)

建立tag

不管是輕量級tag還是附註tag,都可以基於當前commit,或者指定某個commit打標籤。

基於當前commit:

輕量級tag: git tag v1.1-lw
附註tag: git tag -a v1.0 -m "before aws test"

基於指定commit:

輕量級tag: git tag v1.1-lw ${commit-SHA-1}
附註tag: git tag -a -m "before aws test" v1.0 ${commit-SHA-1}

輕量級tag

輕量標籤本質上是將提交校驗和儲存到一個檔案中 – 沒有儲存任何其他資訊。 建立輕量標籤,不需要使用 -a 、 -s 或 -m 選項,只需要提供標籤名字:

$ git tag v1.1-lw 3a0b882ff42121f72f2490d9c1eced342cbcdef0
$ git tag
v1.0
v1.1-lw
$ git show v1.1-lw
commit 3a0b882ff42121f72f2490d9c1eced342cbcdef0 (tag: v1.1-lw)
Author: anyscoding <34288556+anyscoding@users.noreply.github.com>
Date: Tue Dec 12 11:51:57 2017 +0800

delete lines for aws test

diff --git a/README.md b/README.md
index 5d7e7d1..3f5c828 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,2 @@
 # HelloWorld
 this is my first project on github
-
-add new line for aws test build action output
-
-add new line for aws test build action output

可以看出,git show 輕量級標籤,標籤所在的commit的資訊

附註tag

$ git tag -a -m "before aws test" v1.0 cce0567986c702792a28ff510fef6c585e68344f 
$ git tag
v1.0
v1.1-lw

$ git show v1.0
tag v1.0
Tagger: anyscoding <anyscoding@sina.com>
Date: Wed Jan 3 07:27:58 2018 +0800

before aws test

commit cce0567986c702792a28ff510fef6c585e68344f (tag: v1.0)
Author: anyscoding <34288556+anyscoding@users.noreply.github.com>
Date: Tue Dec 12 10:28:14 2017 +0800

Update README.md

diff --git a/README.md b/README.md
index 64ee367..417cbd9 100644
--- a/README.md
+++ b/README.md
@@ -2,3 +2,5 @@
 this is my first project on github

add new line
+
+add new line for aws codepipeline

當使用git show檢視一個附註tag時,除了顯示打標籤的commit資訊外,還會顯示tag本身的資訊,包括:tag名稱、打tag的人、打tag的時間

提交tag

本地打好的tag,要如何共享出去呢?

git push origin v1.0
Counting objects: 1, done.
Writing objects: 100% (1/1), 159 bytes | 159.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To github.com:anyscoding/HelloWorld.git
 * [new tag] v1.0 -> v1.0

如果本地打了多個tag,想要一次性全部共享出去:

$ git tag
 v1.0
 v1.1
 v1.2

$ git push origin --tags
 Counting objects: 2, done.
 Delta compression using up to 4 threads.
 Compressing objects: 100% (2/2), done.
 Writing objects: 100% (2/2), 273 bytes | 273.00 KiB/s, done.
 Total 2 (delta 0), reused 0 (delta 0)
 To github.com:anyscoding/HelloWorld.git
 * [new tag] v1.1 -> v1.1
 * [new tag] v1.2 -> v1.2

在github上檢視:

這裡寫圖片描述

檢出tag

如果想要檢視打tag的狀態,常見的場景是:從某個tag重新出釋出包,可以通過如下命令:

git checkou ${tag-name}

$ git checkout v1.0
Note: checking out '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 performing another checkout.

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

git checkout -b <new-branch-name>

HEAD is now at cce0567... Update README.md

an@DESKTOP-IEU7HQD MINGW64 /d/GitHub/HelloWorld ((v1.0))

刪除tag

tag建立錯誤,或者由於其他什麼原因,需要刪除某個tag。包括刪除本地tag和刪除遠端tag

刪除本地tag

git tag -d ${tag-name}
$ git tag -d v1.1
Deleted tag 'v1.1' (was c67a1ab)

刪除遠端tag

git push origin :refs/tags/${tag-name}
$ git push origin :refs/tags/v1.1
To github.com:anyscoding/HelloWorld.git
 - [deleted] v1.1

再看看github上:

這裡寫圖片描述

相關文章