git tag :打标签与基线

QuibblerQuibbler 2020-03-27 约 5 分钟 2130 次阅读

发布版本、拉基线、标记里程碑,都离不开 git tag:它给历史中的某次提交钉上一张不可变的名片。tag 和分支的区别一句话讲清——分支是会随提交前进的指针,tag 是永远钉在同一提交上的固定指针,所以 tag 可以理解为"不可修改的分支"。这篇按查看、创建、推送删除、检出四类整理常用命令,末尾附速查表,系统讲解见 Pro Git 的打标签一章。

1、查看标签

三个查看命令如下:

git tag                # 列出所有标签
git tag -l 'v3.*'      # 通配符过滤,只看 v3 系列
git tag -n5            # 列表同时显示每条标签的注释

通配符必须配合 -l(或 --list)使用,直接 git tag 'v3.*' 会被当成创建标签。想看某条标签指向的提交详情,用 git show v3.1.0——附注标签会连带显示打标签的人、时间与注释内容,基础用法也可参考 菜鸟教程的标签章节。

2、创建标签

Git 的标签分两种:附注标签(annotated)与轻量标签(lightweight),创建命令如下:

git tag -a v1.2 -m '发布 1.2 版本'   # 附注标签:完整对象,带注释
git tag v1.2-rc                      # 轻量标签:只是一个指针
git tag -a v1.1 9c030a3 -m '补打'    # 给历史提交补打标签

不带 -m 时会进入编辑器写注释。两种标签的取舍如下:

维度 附注标签 轻量标签
本质 Git 数据库中的完整对象 仅指向提交的引用
携带信息 打标签者、邮箱、日期、注释 无
校验 可被校验,支持 GPG 签名 不可
适用场景 正式版本、产品基线 临时标记、私人备忘

官方建议正式发布一律用附注标签——出问题时"谁在何时打的这个版本"就是关键信息。给历史提交补打标签时,末尾带上那笔提交的哈希即可(如上例的 9c030a3),默认则是给当前最新提交打。

3、推送与删除

提交代码不会自动带上标签,需要单独推送:

git push origin v1.2        # 推送单个标签到远程
git push origin --tags      # 一次推送全部本地标签
git tag -d v1.2-rc          # 删除本地标签
git push origin --delete v1.2-rc   # 删除远程标签

基线管理的常见节奏:基线拉出、打附注标签、push origin 标签名 同步给团队,之后的发布记录就以 tag 为准。

4、检出标签与分离头指针

切到某个标签查看代码,和切分支用法相同:

git checkout v1.2            # 检出标签,进入分离头指针状态
git switch -c hotfix v1.2    # 基于 v1.2 拉出修复分支(推荐写法)

检出标签后 Git 会提示进入分离头指针(detached HEAD)状态:此时可以看代码、可以编译,但如果直接提交,新提交不属于任何分支,除了完整的提交哈希外无处可寻,极易丢失。所以要修旧版本的 bug,正确姿势是从标签拉出一条新分支(如上例的 hotfix),修完再走正常合并流程。

5、速查表

五类动作浓缩一张表:

场景 命令
列出 / 过滤标签 git tag / git tag -l 'v3.*'
打正式版本标签 git tag -a v1.2 -m '注释'
给历史提交补打 git tag -a v1.1 9c030a3
推送单个 / 全部 git push origin v1.2 / --tags
删除本地 / 远程 git tag -d v1.2 / git push origin --delete v1.2
基于标签拉分支 git switch -c hotfix v1.2

6、总结

tag 的心智模型是"钉死在提交上的固定指针":正式发布用附注标签(-a 加 -m,可校验可签名),临时标记用轻量标签;标签不会随代码推送自动上传,记得 push origin --tags;检出标签进入分离头指针状态,只读不写,要改就从标签拉分支。对于维护多版本的产品团队,建议把"拉基线 → 打附注标签 → 推送 → 基于标签拉修复分支"固化成标准动作,配合此前的分支、stash、log 三篇速查,Git 日常操作就凑齐了整套手册,更多细节可查 官方 git-tag 文档。

相关推荐

git rebase调整commit提交的顺序
Git

git rebase调整commit提交的顺序

git rebase调整commit之间顺序一连提交了几笔commit,想调整一下顺序,把其中一笔提交置顶拿到最前面来,专门修改这一笔提交。当然如果想修改某一笔提交,可以reset到那笔commit,进行修改,完成之后再把之后的提交cherry-pick回去。git log查看提交记录,每笔提交记录太多,可以让每笔提交仅显示一行查看 --oneline。使用git rebase -i进入编辑,之前

1.4w
git blame:显示文件的每行提交记录信息
Git

git blame:显示文件的每行提交记录信息

git blame:显示文件的每行提交记录信息git blame对文件的每行信息都进行注释。能看到关于该行修改的每一次commit的哈希标签、作者和提交日期。Intellij IDEA在打开文件的行数右键点击Annotate显示文件每一行的记录信息。应该用的就是这个命令实现的功能。

5.9k
Git可视化工具:Sublime Merge
Git

Git可视化工具:Sublime Merge

Git可视化工具:Sublime Merge同事推荐了一个Git 可视化客户端:Sublime Merge ,由知名文本编辑器 Sublime Text 开发商打造。自己平时用的则是最好用的Git GUI工具:SourceTree,也体验了下Sublime Merge,用起来还不错。直接点击下载或购买后,安装即可。功能免费,完整功能无限制使用。但是订阅内容(比如更换主题)付费。Sublime Me

3.1k