Git tag
本文档将讨论 Git 的标记概念和 git tag
命令。标记是指向 Git 历史记录中特定点的引用。标记通常用于捕获用于标记版本发布的历史点(即v1.0.1)。
标记就像一个不变的分支。与分支不同,标记在创建后没有进一步的提交历史记录。有关分支的更多信息,请访问 git branch
页面。
本文档将介绍不同类型的标记、如何创建标记、列出所有标记、删除标记、共享标记等。
创建标记
要创建新标记,请执行以下命令:
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 速查表
查看解决方案
了解 Bitbucket Cloud 的 Git
轻量级标记
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
前面的示例使用了 -l
选项和 -rc
的通配符表达式,它返回标有 -rc
前缀的所有标记的列表,该前缀之前用于标识候选版本。
标记旧提交
前面的标记示例演示了对隐式提交的操作。默认 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'
执行 git log
将输出提交列表。在这个例子中,我们将为新标记选择提交量最高的 Merge branch 'feature'
。我们需要引用提交的 SHA 哈希才能传递给 Git:
git tag -a v1.2 15027957951b64cf874c3557a0f3547bd83b3ff6
执行上述 git tag
调用将为我们在上一个 git log
示例中选择的提交创建一个标识为 v1.2
的新的带注释的提交。
重新标记/替换旧标记
如果您尝试使用与现有标记相同的标识符创建标记,Git 会抛出一个错误,如下所示:
fatal: tag 'v0.4' already exists
此外,如果您尝试使用现有的标记标识符标记较旧的提交,Git 会抛出同样的错误。
如果您必须更新现有标记,则必须使用 -f FORCE
选项。
git tag -a -f v1.4 15027957951b64cf874c3557a0f3547bd83b3ff6
执行上述命令会将 15027957951b64cf874c357a0f357bd83ff6
提交映射到 v1.4
标记标识符。它将覆盖 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
要同时推送多个标记,请将 --tags
选项传递给 git push
命令。当其他用户克隆或提取代码存储库时,他们将收到新的标记。
签出标记
您可以使用 git checkout 命令在标记处查看代码存储库的状态。
git checkout v1.4
上面的命令将签出 v1.4
标记。这会使代码存储库处于游离的 HEAD
状态。这意味着所做的任何变更都不会更新标记。他们将创建一个新的游离的提交。这个新的游离的提交不会成为任何分支的一部分,只能通过提交 SHA 哈希直接访问。因此,在游离的 HEAD
状态下进行变更时,最好创建一个新分支。
删除标记
删除标记是一项简单的操作。将 -d
选项和标记标识符传递给 git tag
会删除已识别的标记。
$ git tag
v1
v2
v3
$ git tag -d v1
$ git tag
v2
v3
在此示例中,执行 git tag
以展示显示 v1、v2、v3 的标记列表,然后执行 git tag-d v1
,删除 v1 标记。
摘要
总而言之,标记是一种用于创建 Git 代码存储库快照的附加机制。传统上,标记用于创建与软件发布周期相对应的语义版本号标识符标记。git tag
命令是创建、修改和删除标记的主要驱动命令。有两种类型的标记:带注释的标记和轻量级标记。带注释的标记通常是更好的做法,因为它们会存储有关标记的额外有价值的元数据。本文档中介绍的其他 Git 命令包括 git push 和 git checkout。访问他们的相应页面,了解有关扩展使用的讨论。
分享此文章
下一主题
推荐阅读
将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。