二 『現學現忘』Git基礎 — 37、標簽tag

目錄

  • 5、共享標簽
  • 6、刪除標簽
  • 7、修改標簽指定提交的代碼
  • 8、標簽在.git目錄中的位置
  • 9、本文中所使用到的命令
提示:接上一篇文章內容 。
5、共享標簽默認情況下 , git push 命令并不會傳送標簽到遠程倉庫服務器上 。
在創建完標簽后,你必須顯式地(手動)推送標簽到遠程服務器上 。
需要將標簽推送到遠程版本庫作為一個發行版本,可以通過以下兩種方式:
(1)推送本地的指定標簽
這個過程就像共享遠程分支一樣,你可以執行命令: git push origin <tagname>
$ git push origin v1.5Counting objects: 14, done.Delta compression using up to 8 threads.Compressing objects: 100% (12/12), done.Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.Total 14 (delta 3), reused 0 (delta 0)To git@github.com:schacon/simplegit.git * [new tag]v1.5 -> v1.5(2)推送本地所有為推送的標簽
如果想要一次性推送很多標簽 , 也可以使用帶有 --tags 選項的 git push 命令 。
這將會把所有不在遠程倉庫服務器上的標簽全部推送過去 。
$ git push origin --tagsCounting objects: 1, done.Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.Total 1 (delta 0), reused 0 (delta 0)To git@github.com:schacon/simplegit.git * [new tag]v1.4 -> v1.4 * [new tag]v1.4-lw -> v1.4-lw當然其他人從倉庫中克隆或拉取 , 他們也能得到你的那些標簽 。
說明:
  • git push 推送兩種標簽使用 git push <remote> --tags 命令(remote:遠程倉庫) 。
  • 推送標簽并不會區分輕量標簽和附注標簽,沒有選項能夠讓你只選擇一種標簽進行推送 。
(3)查看結果
登錄GitHub并打開遠程版本庫頁面,在release中可以查看推送到遠程庫中的標簽,即發行版本 。
其他用戶在更新本地版本庫時 , 同時會將標簽一并更新,然后可以在本地指定標簽版本上,作一個新的分支進行開發,開發完成后再合并到主要分支上 , 最后將該分支刪除 。
6、刪除標簽(1)刪除本地標簽
要刪除掉本地倉庫上的標簽,可以使用命令 git tag -d <tagname> 。
例如,可以使用以下命令刪除一個輕量標簽:
$ git tag -d v1.4-lwDeleted tag 'v1.4-lw' (was e7d5add)注意上述命令并不會從任何遠程倉庫中移除這個標簽 。
(2)刪除遠程標簽
你必須用命令: git push <remote> :refs/tags/<tagname> 來更新你的遠程倉庫 。
提示:若要刪除遠程庫中的標簽,首先要刪除本地庫中的該標簽,然后再運行上面的命令 。
第一種方式是 git push <remote遠程庫> :refs/tags/<tagname>
$ git push origin :refs/tags/v1.4-lwTo /git@github.com:schacon/simplegit.git - [deleted]v1.4-lw上面這種操作的含義是,將冒號前面的空值推送到遠程標簽名,從而高效地刪除它 。
第二種更直觀的刪除遠程標簽的方式是:
$ git push origin遠程庫 --delete <tagname>7、修改標簽指定提交的代碼問題一:
軟件版本一旦被指定 , 即標簽一旦與某一commit-id綁定,那么這個版本(提交)的代碼還能修改嗎?
  • 若將master分支回退到該commit-id,然后再修改代碼,修改完成后再提交 , 我們會發現該提交代碼修改過了,但該標簽綁定的commit-id并沒有發生變化,即該軟件版本(標簽)指向的代碼仍未修改 。(也就是標簽指向的提交沒有改變)
  • 當然,此時我們可以將該標簽刪除 , 然后再定義一個同名標簽,與修改過代碼的提交進行綁定,這樣也是可以的 。
問題二:
但是如上操作存在一個巨大的風險,我們修改過的代碼是master主分支上的 , 一旦修改過的代碼出現問題,將可以導致整個代碼出問題 。所以,我們一般不會修改master主分支上的代碼 。那應該怎么辦?
  • Git將標簽定義為與分支同級別的概念,它不僅是一個提交的別名 。
  • Git允許程序員使用分支切換命令git checkout,將代碼轉向標簽所指定的版本 。
小示例:
# 1.查看當前版本庫分支L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)$ git tagv1.0v2.0# 2.切換到v1.0標簽上L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learning_github (master)$ git checkout v1.0Note: switching to 'v1.0'.You are in 'detached HEAD' state. You can look around, make experimentalchanges and commit them, and you can discard any commits you make in thisstate without impacting any branches by switching back to a branch.If you want to create a new branch to retain commits you create, you maydo so (now or later) by using -c with the switch command. Example:git switch -c <new-branch-name>Or undo this operation with:git switch -Turn off this advice by setting config variable advice.detachedHead to falseHEAD is now at 69fc420 第二次提交,添加v2版內容L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learning_github ((v1.0))$

推薦閱讀