tag 命令

对某一时间点上的版本进行打标签,比如在发布某个版本的时候。

注意:

  1. 本地标签与远程标签是相互独立的

  2. 本地有的标签,远程仓库可以没有。远程仓库中有的标签,本地也可以没有。两者相互不影响。而且,在正常 push 与 pull 时,标签不会被提交或拉取。

  3. 不显式将标签提交到远程仓库,本地的标签就不会出现在远程仓库中。同样,不显式的删除远程仓库中的标签,即使本地已经没有了指定的标签,远程仓库中还会存在。

命令

主要涉及的操作有:增,删,查,推送到远程仓库,删除远程仓库中的标签,从远程仓库拉取。

标签 含义
git tag <tagname> 创建指定名字的标签
git tag <tagname> <checksum> 在指定的提交处创建一个标签
git tag -a <tagname> -m <msg> 创建指定名字的带信息的标签
git tag -a <tagname> <checksum> -m <msg> 创建指定名字的带信息的标签
git tag --delete <tagname> 删除本地指定的标签
git tag 列出所有标签
git show tag <name> 查看指定标签的详细信息
git push <仓库别名> <tagname> 将指定的标签提交到远程仓库中
git push <仓库别名> --tags 将本地所有标签提交到远程仓库中
git push <仓库别名> --delete tag <tagname> 删除远程库中指定的标签
git fetch <仓库别名> tag <tagname> 拉取远程库中指定的标签

所有跟远程仓库相关的,都需要指定仓库别名。

删除远程仓库中的标签时,需要关键字 tag 。如果直接写成 git push <别名> --delete <name> 指的是删除远程仓库中的分支。

通过 fetch 获取远程标签时,也需要使用 tag 关键字。不使用 tag 关键字时,表示 fetch 远程的分支。


创建

简单标签

可以通过 git tag <name> 创建一个标签

带附注(annotated)的标签

git tag -a <name> -m <msg>。其中 msg 是对该标签的说明。

$ git tag -a tagName -m "msg"

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

后补标签

在某些时候可能需要对原来某次提交打标签,可以使用 git tag <name> <checksum> 对某次提交进行后补标签。如下:

  1. 首先能过 git log 查看想要打标签的校验和:

    $ git log --pretty=oneline
    ff9fcc37b359373f10d4d12fdc32d3e1994d8e05 Update a.txt
    45adb4b64a43fccb10672199997f36d2c1f4caa6 Create test.html
    ec9d334dd611e6d058a91d70110afa73ec092a47 Update a.txt
    02cba518a42c11e0bc90ed21c9ebe72a8d5252d0 remove
    06254ef89d49a33669c48849961b50044ac551c4 rm
    c2139ae9909fcf0fc01dcaa2d9defee3cfac84da Create test
    
  2. 通过 git tag 增补标签:

    $ git tag -a v0.2 c2139ae9909fcf0fc01dcaa2d9defee3cfac84da
    
    • 也可以通过 git tag -a <name> <checksum> -m <msg> 增补一个带文字说明的标签。如上面的示例,它会启动文本编辑器,让输入本次标签的文字说明。

查看

显示标签详细信息

通过 git show <name> 显示指定标签的详细信息

$ git show tagName
tag tagName
Date:   Fri Sep 8 17:09:22 2017 +0800

msg

这里并不是类似于 remote 命令时使用 git remote show 格式,而是使用 git show ,因为 git tag show 会创建一个名为 show 的标签

列出已有的标签

  1. 通过 git tag 列出所有的标签

  2. 通过 -l 列出符合模式的所有标签。如:

    git tag -l "*.1.*"
    v2.1.1
    v2.1.1.2
    v2.1.2
    

    其中 *.1.* 就是指定的标签模式。

  3. 所有的 tag 按字母顺序排列显示,而不是按时间顺序。


提交

默认情况下,git push 并不会把标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。其命令格式如同推送分支,运行 git push <别名> <name>

  1. 可以使用 git push <别名> --tags 将本地所有的新建标签都 push 到远程仓库中。

删除

本地删除

使用git tag --delete <name> 删除指定的 tag。

可以将 --delete 换成 -d。git 中,-- 后跟的是单词全称,- 后跟的是单词简写,但两者用途完全一样。

$ git tag
t1
t2
$ git tag -d t1
Deleted tag 't1' (was 884d05c)
$ git tag
t2
$ git tag --delete t2
Deleted tag 't2' (was 504b7e0)
$ git tag
$ 

最后使用 git tag 时,本地已经没有标签了。

远程删除

使用 git push <别名> --delete tag <name> 删除指定仓库的指定标签。

  1. 删除远程仓库中指定的标签后,本地的标签可以一直存在。

  2. 同样,--delete 也可以换成 -d 。

  3. 远程删除后,本地的标签还存在,可以通过 git tag -d 删除本地标签。


拉取远程标签

使用 git fetch <别名> tag <name> 获取本地不存在,而远程存在的标签。

如:

ZBMAC-C02VP4ZUH:demo xx$ git tag
ZBMAC-C02VP4ZUH:demo xx$ git fetch origin tag test
From https://github.com/xx/gitdemo
 * [new tag]         test       -> test
ZBMAC-C02VP4ZUH:demo xx$ git tag
test

第二个命令拉取远程的 test 标签,然后本地才有 test 标签存在。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本片内容转自CSDN http://blog.csdn.net/ithomer/article/details/7...
    五娃儿阅读 4,956评论 2 88
  • Add & Commit git init 初始化一个 Git 仓库(repository),即把当前所在目录变成...
    冬絮阅读 4,890评论 0 9
  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,755评论 1 17
  • 2017-6-27 王老七 王老七的美好生活 相信大家对于动不动就背一书包蹲马路边上要钱的“求4元坐车”少年并...
    普通人老七阅读 279评论 0 0
  • 水平线标签<hr/> 属于自闭合标签。 简书上可以直接显示,如下: 上面这一条就是水平线了。 这里说一下什么是自闭...
    进击的小明阅读 278评论 0 0