git 標簽管理
git 如何打標簽呢?
標簽是什么?
標簽 相當于一個 版本管理的一個貼紙,隨時 可以通過標簽 切換到 這個版本的狀態 ,
有人可能有疑問 git commit
就可以知道 代碼的改動了, 為啥還需要標簽來管理呢?
首先 多人協作開發的時候,有很多commit 有時候會比較亂,而tag 一般完成了一個release, 并且測試通過后, 再去打個 標簽。 代表一次上線功能的小小的里程碑。
注意標簽 是不可以 像分支一樣 可以移動的.一旦打完標簽就意味著 這個版本確定下來, 如果發現了這個版本的bug ,要基于這個標簽 創建分支 進行修復,而不能直接在某個標簽進行修改代碼.
標簽和 commitID 的區別是什么呢?
標簽 本質來說 和commitID 沒有區別. 唯一的區別 標簽是一個可以人類可以閱讀的名稱. commitID 是一個hash 值, 一般不是那么容易記住.
可以通過標簽名稱 檢出分支, 當然也可以通過某個 commitID 檢出分支. 標簽的意義 就是針對某次commit 完成了一個產品相對完整的功能,或者優化, 或者準備好了一個即將可以發布的代碼版本, 我們需要記錄一下這個偉大的時刻, 僅此而已. 當然 你可以說, 我通過 commit 里面的message 也是 可以說明這個 重要的提交 git commit -m "release version"
當然是可以的,沒有問題. 如果每個人都能有commit 信息的規范做法,那么 tag的作用 就不那么大. 然而在真實開發體驗中, 很多commit message, 寫的相對沒有那么詳細, 比如: fix a bug , Update xxx file, optimize code ,refactor code 等等 這些commit message. 會讓代碼的維護者頭大,隨著時間的推移, 都不知道哪個是重要的事件,或者里程碑. 這個時候 我們就需要 里程碑一樣的東西, 就是對某個commitID 打標簽, 標志這次這次完成了一個大的功能. 或者一次大版本測試,準備發布. 這就是 tag 存在的意義.
我來演示一下根據 tag 檢出分支,以及根據 commitID 檢出分支
# 通過 tag 檢出分支
git checkout -b b_2_0_tag 2.0.0 # 通過commitID 檢出分支
git checkout -b b_2_0 c1f2646
檢出結果如下: 我們可以清晰的看到,兩個分支 在同一個 commitID, 兩者完全一樣的.
查看標簽
git tag
[xxxx@xxxxx xxxxx]$ git tag
db_sharding_v0.1
db_sharding_v0.2
v20191126
v20191127
v20191127.1
v20191203
v20200119
v20200204
v20200206
支持 匹配查看標簽
git tag -l 'v2020*'
[ec2-user@10-181-160-142 history_retriever]$ git tag -l 'v2020*'
v20200119
v20200204
v20200206
查看某一個標簽的詳情
git show 標簽名稱
git show v20200206
打標簽 并且 推送到 遠程 共享標簽
git tag -a 標簽名稱 -m comment 信息 ,message 一些描述信息
一般打標簽都是針對當前的分支,最后一個提交
-a
: 理解為 annotated
的首字符,表示 附注標簽
-m
: 指定附注信息
git tag -a v20200206 -m "穩定版,release version" # 推送到遠程 標簽(共享標簽)
git push origin v20200206
后期打標簽
假設已經完成了某個feature 已經提交了代碼,但是 忘記 打tag 了,可以通過 commit 進行打tag
# 查看提交歷史
git log --pretty=oneline# 一行顯示 commit 信息
git log --oneline
[xxxxx@xxxxxx xxxxxx]$ git log --pretty=oneline
5f3f449120676310a581df86c3a58144a1da045d Merged PR 12558: test query string
3b34e0dd65fff220812a4f1858e20e1a3326b497 ut 排除
8a3a0428e4276d160c7ab220ecbf05357c17dd53 1
1892ad9d0d585bc56cd06f3c398e4b52bd902fe3 test query string
25fbee19721013c685df903cfca20517dcfea357 test query string
d6cef413a0cde8c0233ed5ff13f259bc76b9c688 Merged PR 12546: ut - rank task
0f633ea5cc0ba357b2c0cead9a1cd280c5c33a8f ut - rank task
根據 commitID 來打標簽
git tag -a 標簽名稱 commitID
git tag -a v20200109.1 0f633ea
刪除 本地標簽
git tag -d 標簽名稱
git tag -d v0.0.1
推送一個標簽
git tag -d 標簽名稱
git push origin v0.0.1
推送本地所有的標簽到遠程倉庫
git push origin --tags
刪除遠程倉庫標簽
git push origin :refs/tags/標簽名
git push origin :refs/tags/v0.0.1
這個命令更加直觀
git push origin --delete <tagname>
通過標簽檢出一個分支
根據 標簽 檢出一個分支 branch_version3
git checkout -b 分支名 標簽名
git checkout -b branch_version3 v3.0.0
參考鏈接
git-scm.com
git 標簽管理