## git tag 給歷史記錄中的某個重要的一點打上標簽
如果你達到一個重要的階段,并希望永遠記住那個特別的提交快照,你可以使用?`git tag`?給它打上標簽。 該?`tag`?命令基本上會給該特殊提交打上永久的書簽,從而使你在將來能夠用它與其他提交比較。 通常,你會在切取一個發布版本或者交付一些東西的時候打個標簽。
比如說,我們想為我們的 Hello World 項目發布一個“1.0”版本。 我們可以用?`git tag -a v1.0`?命令給最新一次提交打上(`HEAD`)“v1.0”的標簽。?`-a`?選項意為“創建一個帶注解的標簽”,從而使你為標簽添加注解。絕大部分時候都會這么做的。 不用?`-a`?選項也可以執行的,但它不會記錄這標簽是啥時候打的,誰打的,也不會讓你添加個標簽的注解。 我推薦一直創建帶注解的標簽。
~~~
$ git tag -a v1.0
~~~
當你執行?`git tag -a`?命令時,Git 會打開你的編輯器,讓你寫一句標簽注解,就像你給提交寫注解一樣。
現在,注意當我們執行?`git log --decorate`?時,我們可以看到我們的標簽了:
~~~
$ git log --oneline --decorate --graph
* 594f90b (HEAD, tag: v1.0, master) reverted to old class name
* 8d585ea Merge branch 'fix_readme'
|\
| * 3ac015d (fix_readme) fixed readme title
* | 3cbb6aa fixed readme title differently
|/
* 558151a Merge branch 'change_class'
|\
| * 3467b0a changed the class name
* | b7ae93b added from ruby
|/
* 17f4acf first commit
~~~
如果我們有新提交,該標簽依然會待在該提交的邊上,所以我們已經給那個特定快照永久打上標簽,并且能夠將它與未來的快照做比較。
不過我們并不需要給當前提交打標簽。如果我們忘了給某個提交打標簽,又將它發布了,我們可以給它追加標簽。 在相同的命令末尾加上提交的 SHA,執行,就可以了。 例如,假設我們發布了提交?`558151a`(幾個提交之前的事情了),但是那時候忘了給它打標簽。 我們現在也可以:
~~~
$ git tag -a v0.9 558151a
$ git log --oneline --decorate --graph
* 594f90b (HEAD, tag: v1.0, master) reverted to old class name
* 8d585ea Merge branch 'fix_readme'
|\
| * 3ac015d (fix_readme) fixed readme title
* | 3cbb6aa fixed readme title differently
|/
* 558151a (tag: v0.9) Merge branch 'change_class'
|\
| * 3467b0a changed the class name
* | b7ae93b added from ruby
|/
* 17f4acf first commit
~~~