## 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
~~~