• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • git tag

    git tag命令用于创建、列出、删除或验证使用 GPG 签名的标签对象。Git 给历史记录中的某个重要的一点打上标签。git tag用于创建一个标签,用于在开发阶段,某个阶段的完成,创建一个版本,在开发中都会使用到,可以创建一个 tag 来指向软件开发中的一个关键时期,比如版本号更新的时候可以建一个 version1.0、version1.2 之类的标签,这样在以后回顾的时候会比较方便。

    语法

    git tag [-a | -s | -u <keyid>] [-f] [-m <msg> | -F <file>]
            <tagname> [<commit> | <object>]
    git tag -d <tagname>…​
    git tag [-n[<num>]] -l [--contains <commit>] [--no-contains <commit>]
            [--points-at <object>] [--column[=<options>] | --no-column]
            [--create-reflog] [--sort=<key>] [--format=<format>]
            [--[no-]merged [<commit>]] [<pattern>…​]
    git tag -v [--format=<format>] <tagname>…​
    

    软件的某个发行版本所对应的,其实就是软件开发过程中,某一个阶段的最后一次git commit提交。我们知道每一个提交操作,对应的都会生成一个 commit-id,而标签就是与某一个 commit-id绑定的名称。一个标签一旦与某一个 commit-id绑定,那么该标签就不能修改绑定到其它 commit-id了,除非将该标签删除后才可以与其 commit-id 绑定。

    标签对象(tag object)非常类似于一个提交对象,它包含一个标签创建者信息、一个日期、一段注释信息,以及一个指针。主要的区别在于,标签对象通常指向一个提交对象,而不是一个树对象。它像是一个永不移动的分支引用,永远指向同一个提交对象,只不过给这个提交对象加上一个更友好的名字罢了。

    像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。比较有代表性的是,人们会使用这个功能来标记发布结点( v1.0 、 v2.0 等等),我们也可以称标签 tag 为里程碑。

    • Git 中的标签,都会以文件的形式存储在.git/refs/tags目录中。
    • 文件中记录的是 tag 标签的校验和(索引值)。
    • 通过索引值或者标签名可以查看该 tag 对象的内容。
    • tag 对象的内容就包括他指向的 commit。其实 tag 对象就是对 commit 对象的一个封装。


    列出标签

    git tag列出已有的标签,可以带上参数-l--list):

    git tag
    v1.0
    v2.0
    

    这个命令以字母顺序列出标签,查看具体标签的详情,使用命令:git show tagname

    你也可以按照特定的模式查找标签。例如,Git 自身的源代码仓库包含标签的数量超过 500 个。如果只对 1.8.5 系列感兴趣,可以运行:

    git tag -l "v1.8.5*"
    
    v1.8.5
    v1.8.5-rc0
    v1.8.5-rc1
    v1.8.5-rc2
    v1.8.5.1
    v1.8.5.2
    v1.8.5.3
    
    • 如果你只想查看完整的标签列表,运行git tag命令,会默认以列表的方式展现版本库中的标签。
    • 如果你提供了一个匹配标签名的通配模式,如上"v1.8.5*",那么-l--list选项就是强制要使用的。


    创建标签

    Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated)。

    • 轻量标签:很像一个不会改变的分支,它只是某个特定提交的引用。
    • 附注标签:轻量标签只有标签名称,而使用附注标签,还可以为标签添加说明。
      • 是存储在 Git 数据库中的一个完整对象,它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间,此外还有一个标签信息,并且可以使用 GNU Privacy Guard (GPG)签名并验证。提示:GPG 是一种加密算法,现在 Github 支持提交使用 GPG 加密,从而保证提交的数据,在传输的过程中没有被篡改。
      • 通常会建议创建附注标签,这样你可以拥有以上所有信息。
      • 但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。
      • 创建附注标签,就会产生 Git 中的第四种对象:tag 对象。

    创建轻量标签

    轻量标签本质上是将提交校验和存储到一个文件中,而没有保存任何其他信息。创建需要提供标签名字,没有其他参数。

    git tag v1.3
    
    git tag
    v1.0
    v1.1
    v1.2
    v1.3
    
    git show v1.3
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon <schacon@gee-mail.com>
    Date:   Mon Mar 17 21:52:11 2008 -0700
    


    创建附注标签

    git tag -a 标签名 -m '说明信息'。
    

    提示:这是在最新一次提交打上,打标签。即若不指定标签绑定的 commit-id,则默认为HEAD指针所指向的提交。

    • -a:为"创建一个带注解的标签"。( a 即 annotated 的缩写)。
    • -m:指定该标签的说明信息(必须)。如果你创建标签的时候,没有指定说明信息,Git 会启动编辑器要求你输入信息。
    git tag -a v1.3 -m "my version 1.3"
    
    git tag
    v1.0
    v1.1
    v1.2
    v1.3
    
    git show v1.3
    
    tag v1.3
    Tagger: Ben Straub <ben@straub.cc>  # 打标记的人
    Date:   Sat May 3 20:19:12 2014 -0700     # 打标机的实际
    
    my version 1.4  # 标记的说明信息
    
    # 以下是标记所对应的 commit 对象的信息
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon <schacon@gee-mail.com>
    Date:   Mon Mar 17 21:52:11 2008 -0700
    
        changed the version number
    

    输出显示了打标签者的信息、打标签的日期时间、标记说明信息,然后显示具体的提交信息。


    后期打标签

    你也可以对过去的某个提交打标签。语法如下:

    git tag -a 标签名 commit-id -m '说明信息'
    
    # 版本库提交历史如下:
    git log --oneline --graph
    *   3110083 (HEAD -> master) 第7次提交,完成dev分支的新功能
    |\
    | * e94af28 第6次提交,修改dev和readme文件
    | * 9eb3224 第4次提交,dev分支开发 dev.txt文件
    * | 0690030 第5次提交,新增内容:branch test v4
    |/
    * b97ccfd 第3次提交,新增内容:branch test v3
    * f72a9fe 第2次提交,新增内容:branch test v2
    * fa2439a 第1次提交,新增 readme.txt 文件
    
    # 给第3次提交打标签
    git tag -a v1.0 b97ccfd -m 'v1.0 里程碑'
    
    # 查看提交历史
    git log --oneline --graph
    
    *   3110083 (HEAD -> master) 第7次提交,完成dev分支的新功能
    |\
    | * e94af28 第6次提交,修改dev和readme文件
    | * 9eb3224 第4次提交,dev分支开发 dev.txt文件
    * | 0690030 第5次提交,新增内容:branch test v4
    |/
    * b97ccfd (tag: v1.0) 第3次提交,新增内容:branch test v3
    * f72a9fe 第2次提交,新增内容:branch test v2
    * fa2439a 第1次提交,新增readme.txt文件
    
    # 查看一下,v1.0 这个标签的信息。
    
    git show v1.0
    tag v1.0
    Tagger: sun_wk <sun_wk@126.com>
    Date:   Sun Apr 18 17:12:53 2021 +0800
    
    v1.0 里程碑
    
    commit b97ccfd5f3e98c12ab9c0fb4ca4b308e6805f7ed (tag: v1.0)
    Author: sun_wk <sun_wk@126.com>
    Date:   Fri Apr 16 22:07:47 2021 +0800
    
        第3次提交,新增内容:branch test v3
    


    共享标签

    在创建完标签后,你必须显式地(手动)推送标签到远程服务器上。需要将标签推送到远程版本库作为一个发行版本,可以通过以下两种方式:

    (1)推送本地的指定标签:这个过程就像共享远程分支一样,你可以执行命令:

    git push origin tagname
    git push origin v1.5
    Counting objects: 14, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (12/12), done.
    Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
    Total 14 (delta 3), reused 0 (delta 0)
    To git@github.com:schacon/simplegit.git
     * [new tag]         v1.5 -> v1.5
     

    (2)推送本地所有为推送的标签:如果想要一次性推送很多标签,也可以使用git push --tags命令。这将会把所有不在远程仓库服务器上的标签全部推送过去。

    git push origin --tags
    Counting objects: 1, done.
    Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
    Total 1 (delta 0), reused 0 (delta 0)
    To git@github.com:schacon/simplegit.git
     * [new tag]         v1.4 -> v1.4
     * [new tag]         v1.4-lw -> v1.4-lw
     

    当然其他人从仓库中克隆或拉取,他们也能得到你的那些标签。


    删除标签

    删除本地标签

    要删除掉本地仓库上的标签,可以使用命令:

    git tag -d tagname
    
    git tag -d v1.4
    Deleted tag 'v1.4' (was e7d5add)
    


    删除远程标签

    若删除远程仓库标签,首先要删除本地库中的该标签,然后再远程服务器端上的标签。

    # 方式一:
    git push remoteName --delete tagname
    
    # 方式二:
    git push remoteName :refs/tags/tagname
    
    git push origin :refs/tags/v1.4
    To /git@github.com:schacon/simplegit.git
     - [deleted]         v1.4
     

    上面这种操作的含义是,将冒号前面的空值推送到远程标签名,从而高效地删除它。

    上篇:git rebase

    下篇:git fetch