Git中文社区

标签

Git 可以给仓库历史中的某个提交打上标签,以示重要。通常人们用这个功能来标记发布节点,比如 v1.0.0、v2.1.3。与分支不同,标签创建后不会随着新提交移动。

列出标签

git tag

# 按模式筛选
git tag -l "v1.8.*"

# 按版本号排序
git tag --sort=-v:refname

创建标签

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

附注标签(推荐)

附注标签是存储在 Git 数据库中的完整对象,包含打标签者的名字、邮箱、日期和标签信息,还可以使用 GPG 签名:

git tag -a v1.0.0 -m "发布 1.0.0 正式版"

查看标签信息:

git show v1.0.0

轻量标签

轻量标签只是某个提交的引用,没有额外信息,适合临时使用:

git tag v1.0.0-temp

给历史提交打标签

git tag -a v0.9.0 a1b2c3d -m "补打 0.9.0 标签"

推送标签

默认情况下,git push 不会把标签推送到远程,需要显式推送:

# 推送单个标签
git push origin v1.0.0

# 推送所有标签
git push origin --tags

# 推送提交时,同时推送与之关联的附注标签
git push --follow-tags

删除标签

# 删除本地标签
git tag -d v1.0.0-temp

# 删除远程标签
git push origin --delete v1.0.0-temp

检出标签

如果想查看某个标签对应的代码:

git switch --detach v1.0.0

这会进入分离头指针状态。如果需要基于这个版本修复 Bug,最好创建一个分支:

git switch -c fix-1.0 v1.0.0

语义化版本

业界普遍采用语义化版本(SemVer)规范来命名版本号,格式为 主版本号.次版本号.修订号:

部分何时递增示例
主版本号 MAJOR做了不兼容的 API 修改1.4.2 → 2.0.0
次版本号 MINOR做了向下兼容的功能新增1.4.2 → 1.5.0
修订号 PATCH做了向下兼容的问题修正1.4.2 → 1.4.3

先行版本可以加上后缀,如 2.0.0-alpha.1、2.0.0-rc.1。

基于标签描述版本

git describe 可以根据最近的标签生成一个可读的版本描述,常用于构建脚本:

git describe --tags
# v1.0.0-5-ga1b2c3d
# 表示在 v1.0.0 之后又有 5 个提交,当前提交是 a1b2c3d