教程 > Git 教程 > Git 仓库操作 阅读:1488

Git tag 标签的使用与详解

本章节将讨论Git 中的标签(tag)和 命令 git tag的用法。标签是指向 Git 历史记录中特定点的引用。标签通常用于标记版本发布(即 v1.0.1)的历史记录点。标签就像一个不会改变的分支。但是与分支不同,标签在创建后没有进一步的提交历史。

本文档将介绍不同类型的标签、如何创建标签、列出所有标签、删除标签、共享标签等。

如何创建标签

创建新标签,可以执行以下命令

$ git tag <tagname>

在创建标签时,使用语义标识符替换<tagname>来表示当前仓库的状态。一个常见的模式如下所示

$ git tag v1.4

Git 支持两种不同类型的标签,带注释的标签轻量级标签。前面的示例创建了一个轻量级标签。轻量级标签和带注释的标签在它们存储的元数据量上有所不同。我们可以将带注释标签视为公共标签,将轻量级标签视为私有标签。带注释的标签会存储额外的元数据,例如:标记者名称、电子邮件和日期。轻量级标签本质上是提交的“书签”,它们只是一个名称和指向提交的指针,用于创建指向相关提交的快速链接。


带注释的标签

带注释的标签作为完整对象存储在 Git 数据库中。重申一下,它们存储额外的元数据,例如:标记者名称、电子邮件和日期。与提交和提交消息类似,带注释的标签有一个标记消息。此外,为了安全起见,可以使用 GNU Privacy Guard (GPG) 对带注释的标签进行签名和验证。建议 git 标记使用带注释的标签而不是轻量级的,这样就可以拥有所有相关的元数据。

$ git tag -a v1.4

执行此命令将创建一个新的带注释的标签v1.4。然后该命令将打开配置的默认文本编辑器提示输入更详细的元数据。

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

执行此命令与之前的命令类似,但是,此版本的命令会指定一个-m选项和其后面的消息。这是一种方便的方法,类似于git commit -m。它将立即创建一个新标签,并且不会打开本地文本编辑器。它会直接使用-m选项传入的消息。


轻量级标签

git tag v1.4-lw

执行此命令创建一个轻量级标签v1.4-lw。轻量级标签创建时不需要-a-s-m选项。轻量级标签创建一个新的标签校验和并将其存储在项目存储库的.git目录中。


列出标签

要列出仓库中存储的标签,执行以下命令:

$ git tag

这将输出标签列表:

v0.10.0
    v0.10.0-rc1
    v0.11.0
    v0.11.0-rc1
    v0.11.1
    v0.11.2
    v0.12.0
    v0.12.0-rc1
    v0.12.1
    v0.12.2
    v0.13.0
    v0.13.0-rc1
    v0.13.0-rc2

要细化标签列表,可以指定 -l 选项,后面跟上通配符表达式:

$ git tag -l *-rc*
    v0.10.0-rc1
    v0.11.0-rc1
    v0.12.0-rc1
    v0.13.0-rc1
    v0.13.0-rc2
    v0.14.0-rc1
    v0.9.0-rc1
    v15.0.0-rc.1
    v15.0.0-rc.2
    v15.4.0-rc.3

给之前的提交创建标签

前面的标签示例演示了对隐式提交的操作。默认情况下,git tag 将在HEAD引用的提交上创建一个标签。git tag还可以对特定提交创建标签,而不是默认的HEAD。首先使用git log 查看提交列表

$ git log --pretty=oneline
    15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'feature'
    a6b4c97498bd301d84096da251c98a07c7723e65 add update method for thing
    0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
    6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'

在这个例子中,我们将为最近的一次提交创建一个新标签。我们需要将提交ID 传递给 Git命令:

$ git tag -a v1.2 15027957951b64cf874c3557a0f3547bd83b3ff6

执行上述git tag命令将创建一个新的带注释的标签,标识为v1.2。


更新标签

如果你尝试使用与现有标签相同的标识符创建标签,Git 将抛出如下错误:

fatal: tag 'v0.4' already exists

此外,如果你尝试使用现有标签标识符来标记旧的提交,Git 将抛出相同的错误。

如果必须更新现有标签,则必须使用-f选项。

$ git tag -a -f v1.4 15027957951b64cf874c3557a0f3547bd83b3ff6

执行上述命令会将15027957951b64cf874c3557a0f3547bd83b3ff6提交映射到v1.4标签标识符。它将覆盖旧标签的任何现有内容。


共享:将标签推送到远程

共享标签类似于推送分支。默认情况下,git push不会推送标签。标签必须显式传递给git push。

$ git push origin v1.4
    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@bitbucket.com:atlasbro/gittagdocs.git
     * [new tag]         v1.4 -> v1.4

要同时推送多个标签,需要在调用 git push 命令时使用--tags选项。当另一个用户克隆或拉取一个仓库时,他们也将收到新标签。


签出标签

我们可以使用git checkout命令查看标签处的仓库状态。

$ git checkout v1.4

上面的命令将检出v1.4标签。这使得仓库的HEAD处于分离状态。意味着所做的任何更改都不会更新标签的内容。它们将创建一个新的分离提交。这个新分离的提交将不是任何分支的一部分,并且只能由提交SHA哈希直接访问。因此,无论何时在分离的头部状态中进行更改,创建新分支都是最佳做法。


删除标签

删除标签是一个简单的操作。需要使用-d选项,后面指定要删除的标签标识符。

$ git tag
    v1
    v2
    v3
$ git tag -d v1
$ git tag
    v2
    v3

在此示例中执行 git tag 显示 v1、v2、v3 的标签列表,然后git tag -d v1删除 v1 标签。

查看笔记

扫码一下
查看教程更方便