"春風得意馬蹄疾,一日看盡長安花",對於項目也是如此,最值得期待的恐怕就要數新版本發佈的時刻了吧?每當發佈新版本時要麼是版本號命名(好比v0.0.1
)或者代號命名(好比Chelsea
),無論怎麼說這種里程碑階段老是要留下些許記念意義.git
既然想要記念這種特殊的歷史時刻,天然是但願它可以固定下來,不要發生隨意移動,產生不可預期後果.bash
這種需求其實和咱們前面說的分支概念很類似,均是源於特殊的版本號,逐漸收集起一系列版本,最終造成一條相對獨立的歷史線,但分支並非實現里程碑概念的最佳選擇,爲何?spa
分支適合多人協做開發時互不影響,適當時機主動合併他人工做成果這種模式,而這種模式是由不一樣的功能模塊進行驅動的,正所謂"天下大勢分久必合,合久必分",當功能模塊開發完畢後天然也就沒有分支存在的必要性,更況且分支在收集版本的過程當中會一直移動,並無特殊的固定版本,顯然分支不是最佳選擇!code
可是,分支肯定必定程度上和里程碑概念很類似,源於特定版本,自主命名,收集版本等,那麼何須重頭再來,爲什麼不復用已有概念呢?cdn
實際上,git
中的標籤(tag
) 就是實現里程碑概念的方式,它能夠永久性指向特定的提交併將命名,而後就能夠將其理解成分支同樣引用了!blog
但標籤(tag
)不是分支(branch
),標籤是一個點的話,分支就是若干點鏈接而成的線,標籤是靜態的,分支是動態的,標籤是隻讀的,分只是可讀可寫的.開發
git tag <tag>
# 方式一: 默認 `HEAD` 指向的版本
git tag v0.0.1
# 方式二: 指定 `commit_id` 表示的版本
git tag v0.0.2 f971647
# 方式三: 指定 `commit_id` 表示的版本,同時建立標籤說明信息
git tag -a v0.0.3 -m "v0.0.3" f971647
複製代碼
git tag
git tag
複製代碼
git show <tag>
git show v0.0.1
複製代碼
git tag -d <tag>
git tag -d v0.0.1
複製代碼
git push origin <tag>
git push origin v0.0.1
複製代碼
git push origin --tags
git push origin --tags
複製代碼
git tag -d <tag>
git push origin :refs/tags/<tag>
# 刪除本地標籤
git tag -d v0.0.1
# 推送刪除標籤(刪除也是推送)
git push origin :refs/tags/v0.0.1
複製代碼