Git 可以对某一时间点上的版本打上标签。在做版本发布的时候经常这么做。Git 使用的标签有两种类型: 轻量级的(lightweight)含附注的(annotated)

  • 轻量级标签:就像是个不会变化的分支,实际上它就是个指向特定提交对象的引用。
  • 含附注标签:实际上是存储在仓库中的一个独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。

总结的说就是轻量级标签是一个引用,附注标签是一个独立的对象。一般建议使用附注标签,以保留相关详细信息。

常用命令:

列出所有标签:
$ git tag

用通配符列出标签(如列出所有 v1.0 版本的标签):
$ git tag -l "v1.0*"

列出远程仓库中所有的标签:
$ git ls-remote --tags

新建附注标签:
$ git tag -a v1.4 -m 'my version 1.4'

默认在当前 HEAD 上打标签,如果想对指定的提交(commit)打标签:
$ git tag -a v1.4 -m 'my version 1.4' \<commit>

新建轻量级标签(无需指定任何额外参数):
$ git tag v1.4-lw

查看标签对应的信息:
$ git show v1.4

提交标签到远程仓库:
$ git push origin v1.4

一次提交本地的所有标签:
$ git push origin --tags

获取远程标签:
$ git fetch origin tag <tagname>

删除本地的标签:
$ git tag -d v0.9

删除远程标签 有三种方式:

1. 使用参数 `--delete`:
$ git push origin --delete tag <tagname>

2. 相当于推送一个空分支到远程分支:
$ git push origin :<tagname>

3. 先删除本地 tag,在推送一个空的 tag 到远程仓库:
$ git tag -d <tagname>
$ git push origin :refs/tags/<tagname>

参考资料: