[TOC] #### 1. 标签介绍 --- **应用场景** 当我们发布版本时,通常会先在版本库打一个标签,这个标签就是我们平时所说代码仓库的版本号 标签是版本库的一个快照,但它其实就是指向某个 commit 的指针。所以,创建和删除标签都是瞬间完成的 **git 有 commit ,为什么还要引入 tag ?** “请把上周一的那个版本打包发布,commit号是 6a5819e...” “一串乱七八糟的数字不好找!” 如果换一个办法: “请把上周一的那个版本打包发布,版本号是v1.2” “好的,按照tag v1.2查找commit就行!” 所以,tag 就是一个让人容易记住的有意义的名字,它跟某个 commit 绑在一起。 #### 2. 查看标签 --- ``` # 查看本地库标签 git tag # 一行显示多个标签 git tag --column ``` #### 3. 创建标签 --- 创建标签 ``` # 基于当前 commit id 创建标签 git tag <tagname> # 基于指定 commit id 创建标签 git tag <tagname> <commit id> ``` 创建标签并且添加标签描述(如果不带 -m 参数会进入 vi 编辑模式输入标签描述) ``` # `-a, --annotate` 标签名 `-m, --message` 标签描述 git tag -a <tagname> -m <message> # 经测试,-a 不写也是可以的 git tag <tagname> -m <message> ``` 使用示例 ``` # 添加标签 git tag v1.0.0 # 创建标签并设置标签描述 git tag v1.0.0 -m '正式上线' git tag -a v1.0.0 -m '正式上线' ``` 当在代码托管平台中新增了标签,如果想要将远程仓库中新增的标签更新到本地,只需执行 ``` git pull ``` #### 4. 删除标签 --- 有时会因为手速过快导致标签名称打错了,此时可以删除该标签,重新创建 因为创建的标签都只存储在本地,不会自动推送到远程库。所以,打错的标签可以在本地安全删除 ``` # 删除本地标签 git tag -d <tagname> # 删除远程仓库中的标签的几种方式 git push origin -d <tagname> git push origin :<tagname> git push origin :refs/tags/<tagname> # 使用示例 git tag -d v1.0.0 git push origin -d v1.0.0 git push origin :v1.0.0 git push origin :refs/tags/v1.0.0 ``` 要看看是否真的从远程库删除了标签,可以登录远程仓库查看,比如: Gitee、GitHub。也可以通过下面命令查看: ``` # 查看远程库标签 git ls-remote --tags ``` #### 5. 修改标签 --- git 并没有直接修改标签名的命令,但是可以根据标签名创建新的标签,然后将旧的标签删除 ``` # 根据指定标签创建新标签 git tag <new_tagname> <old_tagname> # 删除本地仓库中的旧标签 git tag -d <old_tagname> # 将新标签推送到远程库、将旧标签从远程库中删除 git push <remote> <new_tagname> :<old_tagname> ``` 下面两种写法等同,建议使用第一种写法: ``` # 写法一: # 将新标签推送到远程库、将旧标签从远程库中删除 git push <remote> <new_tagname> :<old_tagname> # 写法二: # 将新标签推送远程库 git push <remote> <new_tagname> # 删除远程仓库中的旧标签 git push <remote> :<old_tagname> ``` #### 6. 推送标签 --- 将本地标签推送到远程仓库 ``` # 将指定标签推送到远程仓库 git push <remote> <tagname> # 将所有本地标签一次性推送到远程仓库 git push <remote> --tags # 使用示例 git push origin v1.0.0 git push origin --tags ``` #### 7. 检出标签 --- 可以通过标签名称,检出相应版本的代码 ``` git checkout <tagname> ``` 实际开发中,如果需要基于指定标签进行开发,可以先检出标签,然后创建新的分支,在这个新分支上进行开发 ``` # 切换到标签对应的提交记录 git checkout <tagname> # 创建并切换到新分支 git checkout -b <branch> ``` 基于指定标签创建分支也有更简洁的写法 ``` git checkout -b <branch> <tagname> ``` #### 8. git show 查看标签 --- 查看标签以及指向的对象。其实就是查看标签的备注和对应的提交记录 ``` git show v1.0.0 ``` 查看标签指向的树。其实就是查看标签下的文件 ``` git show v1.0.0^{tree} ``` 查看标签对应提交记录的备注信息 ``` git show -s --format=%s v1.0.0^{commit} ```