git的tag是比較常用的一個特性,關於tag有人叫做標籤,有人叫做里程碑,無所謂了。
Git 支持兩種標籤:輕量標籤(lightweight)與附註標籤(annotated)。本篇重要討論如何使用輕量級標籤,關於附註標籤的使用,可以參考 這篇中文版的官方文檔
創建標籤
創建標籤的命令非常簡單
git tag <tag-name>
下面的例子在當前的提交下創建一個名叫v.10
的標籤
git tag v1.0
檢查標籤
通過 git tag -l
列出本地所有的標籤
$ git tag -l
v0.1
v1.0
有了這個標籤列表,就可以看每個具體的標籤對應的提交信息了
通過 git show <tag-name>
來檢查標籤
git show v1.0
commit 0f7f90584bfa45f44547d623d48b9bfac21f1b1c (HEAD -> master, tag: v1.0, origin/master)
Author: zhudengkai <[email protected]>
Date: Wed Apr 8 20:26:02 2020 +0800
add b.txt
diff --git a/b.txt b/b.txt
new file mode 100644
index 0000000..e69de29
還可以通過 git log --decorate
來查看標籤
$ git log --decorate --oneline
0f7f905 (HEAD -> master, tag: v1.0, origin/master) add b.txt
2d19ca3 add a.txt
上面的--oneline
的參數不是必須的,只是爲了簡化輸出。
後期打標籤
上面通過git tag <tag-name>
的方式,會直接把標籤打到當前的提交上,但是當你需要對之前的提交進行打標籤時,可以採用如下兩種方式
第一種方式,checkout到指定提交,具體操作是
- 通過
git chexkout <commit-id>
,切換到想要打標籤的提交 - 通過
git tag <tag-name>
在對應的提交上打標籤 - 通過
git checkout <branch-name>
,再切換到你之前的分支上
第二種方式,使用git tag -a <tag-name> <commit-id>
命令,此時會調起vim編輯器,讓輸入一個提交消息。
兩種方式對比的話,第二種方式再操作上比較簡單,但第一種方式更加純粹一些。由於我喜歡輕量級的標籤,所以我更喜歡用第一種方式。
將標籤推送到遠程git倉庫
通過 git push origin <tag-name>
可以將當前tag推送到遠程倉庫
下面的命令將 v1.0 這個tag推送到遠程倉庫
git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To github.com:kaige11/demo-repo.git
* [new tag] v1.0 -> v1.0
也可以通過下面的命令來將本地所有的標籤一次性推送到遠程倉庫中
git push origin --tags
刪除標籤
刪除本地標籤
git tag -d <tag-name>
刪除遠程標籤
git push origin --delete <tag-name>