在 Git 中,tag(标签)是用于标记仓库历史中特定提交的快照,通常用于标识版本发布,方便后续快速回溯到某个稳定版本。与分支不同,标签是静态的,一旦创建不会随新提交自动移动,而分支是动态的,会跟随新提交更新。
需要注意的是标签不依赖于分支,它直接指向特定提交的静态指针,它的存在完全依赖于提交本身,而与任何分支都没有绑定关系,无论分支如何创建、删除、移动,只要标签指向的提交还在仓库中,标签就始终有效,这种设计确保了标签的独立性和持久性。
tag 本地标签管理
Git 中有两种常用标签类型
第一种是创建一个轻量级标签,在HEAD指针所指向的提交点(当前所在分支)创建标签 git tag v1.0.1
查看现有标签 git tag

创建一个带有附注的标签,git tag -a v1.0.2 -m 'release version'
-a表示附注标签,-m指定注释

删除本地标签 git tag -d v1.0.2
远程标签
git push 不会将本地标签推送到远程仓库,如下


需显式推送,推送标签到远程仓库 git push origin v1.0.1


点击下载,会将打包成zip文件,记录着某一时刻状态下的代码
test-git1-v1.0.1.zip 如下
把多个标签推送到远程 git push origin 标签1 标签2......
把所有标签推送到远程 git push origin --tag

查看远程标签列表 git ls-remote --tags origin
该仓库下另一个用户查看标签发现没有标签内容,因为 Git 默认不会自动拉取远程标签,需要通过特定命令显式拉取
标签拉取 git fetch origin v1.0.1 或 git pull
删除远程标签需要通过命令显式操作,标签默认不会自动同步删除
删除本地标签后,删除远程标签 git push origin :refs/tags/v1.0.3
将一个空引用 : 推送到远程仓库的标签路径 refs/tags/,从而删除该标签
远程标签被删除
另一种删除远程标签的方式,语法更直观
删除本地标签后,删除远程标签 git push origin --delete tag 标签1 标签2...

标签检出
在 Git 中标签检出(checking out a tag)指的是将工作区和暂存区的代码切换到标签所指向的那个特定提交的状态。简单说,就是让当前项目的代码恢复到该标签对应的版本快照。
检出本地仓库标签 git checkout v1.0.0

注意标签指向的是固定的提交而不是分支,因此,检出标签后Git 会进入分离头指针状态
这样存在一定的风险,在分离头指针状态下,你可以修改代码并提交,但这些新提交不会被任何分支指向,如果之后切换到其他分支,这些新提交可能会因为没有分支引用而被 Git 垃圾回收机制清理。
如果只是临时查看旧版本代码,分离头指针状态没问题
但如果需要基于标签 v1.0.1 的代码进行修改,正确的做法是:创建一个名为 dev2 的新分支,将这个分支的初始状态设置为标签 v1.0.1 所指向的提交,并且在创建的同时直接切换到 dev2 分支
git checkout -b dev2 v1.0.1
这样操作后,后续在 dev2 分支上的所有新提交都会被该分支跟踪,既保留了 v1.0.1 版本的基础,又能安全地记录修改,避免因分离头指针导致的提交丢失风险。