Git: 标签

比较有代表性的是使用标签来标记发布结点(v1.0 等等)

列出标签

1
2
3
4
5
6
7
8
$ git tag
v0.1
v1.3
$ git tag -l 'v1.8.5*'
v1.8.5
v1.8.5-rc0
...

这个命令以字母顺序列出标签;但是它们出现的顺序并不重要。

创建标签

Git 使用两种主要类型的标签:

  • 轻量标签(lightweight),很像一个不会改变的分支 - 它只是一个特定提交的引用。
  • 附注标签(annotated),是存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。

通常建议创建 附注标签,这样你可以拥有以上所有信息;但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存那些信息,轻量标签也是可用的。

附注标签

1
$ git tag -a v1.4 -m 'my version 1.4'

-m 选项指定了一条将会存储在标签中的信息。

通过使用 git show v1.4 命令可以看到标签信息与对应的提交信息。

轻量标签

创建轻量标签,不需要使用 -a、-s 或 -m 选项,只需要提供标签名字:

1
$ git tag v1.4-lw

删除标签

1
2
3
4
git tag -d v1.4-lw
# delete tag on remote
git push origin :refs/tags/v1.4-lw

后期打标签

假设提交历史是这样的:

1
2
3
$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile

现在,假设在 v1.2 时你忘记给项目打标签,也就是在 “updated rakefile” 提交。 你可以在之后补上标签。 要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和):

1
$ git tag -a v1.2 9fceb02

共享标签

默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。

1
2
3
4
5
git push origin [tagname]
$ git push origin v1.5
# --tags 选项会把所有不在远程仓库服务器上的标签全部传送到那里
$ git push origin --tags

检出标签

在 Git 中你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。 如果你想要工作目录与仓库中特定的标签版本完全一样,可以使用 git checkout -b [branchname] [tagname] 在特定的标签上创建一个新分支:

1
$ git checkout -b version2 v2.0.0

当然,如果在这之后又进行了一次提交,version2 分支会因为改动向前移动了,那么 version2 分支就会和 v2.0.0 标签稍微有些不同,这时就应该当心了。