【Git 技术专题】如何使用 git 中的 tag 进行版本开发控制?
什么是 tag
git 仓库的 tag 是 git 版本库的一个标记,指向某个 commit id 标记的快照记录指针。
tag 主要用于发布版本的管理,一个当版本发布后,可以为 git 当前的 HEAD(commit id)打上 v.1.0.1、v.1.0.2 等这样的标签。
tag 感觉跟 branch 有点相似,但是本质上和分工上是不同的。
tag 的特征
tag 对应某次 commit 节点, 是一个点,是不可移动的。
branch 对应一系列 commit,是很多点连成的一根线,有一个 HEAD 指针,是可以依靠 HEAD 指针移动的。
所以,两者的区别决定了使用方式,改动代码用 branch ,不改动只查看用 tag。
tag 和 branch 的相互配合使用,有时候起到非常方便的效果,例如:已经发布了 v1.0 v2.0 v3.0 三个版本,这个时候,我突然想不改现有代码的前提下,在 v2.0 的基础上加个新功能,作为 v4.0 发布。就可以检出 v2.0 的代码作为一个 branch ,然后作为开发分支。
创建标签
添加 tag
git tag -a <tagname> -m "added description release notes" #
git tag 用作上线发布的时候打 tag 处理:
处理命令为:
例如
可加-m 添加注释
查看所有的 tag 版本
git tag :查看 tag 列表
git tag --list :查看 tag 列表
git tag -l :同理查看 tag 列表
下载 tag
删除 tag
删除本地名为“v1.0”的 Tag
git push origin :refs/tags/<tagname> # 删除一个远程标签
这时只能在本地可以看到自己新建 Tag,在远程中央仓库中还是看不到在 Tags 下有如何内容,因为我们还没把它推送到中央仓库上
推送到远端
git push origin <tagname> # 推送一个本地标签到远程仓库
例如:
推送全部未推送过的本地标签
如果没有和远程没有同步,可以先拉下来
再上传
推送所有标签
此处对历史提交做 tag 处理
git log --pretty=oneline --abbrev-commitgit tag -a v0.9 -m "v0.9 版本发布上线" <commit-id> # 对历史提交做 tag 处理
现在,假设在 v1.2 时你忘记给项目打标签,也就是在 “updated rakefile” 提交。 你可以在之后补上标签。 要在那个提交上打标签,你需要在命令的末尾指定提交的校验和(或部分校验和):
(总结)推送本地标签到远程仓库
git push origin v1.0-beta # 推送到远程仓库
git push origin v1.0-beta:refs/tags/v1.0-beta # 等效上一条
git push origin --tags # 一次性推送全部尚未推送到远程的本地 tags
删除远程 tag
git tag -d tag-name
git push origin :refs/tags/tag-name
检出标签
git checkout -b <branchName> <tagName>
因为 tag 本身指向的就是一个 commit,所以和根据 commit id 检出分支是一个道理。
但是需要特别说明的是,如果我们想要修改 tag 检出代码分支,那么虽然分支中的代码改变了,但是 tag 标记的 commit 还是同一个,标记的代码是不会变的,这个要格外的注意。
覆盖原有的 tag
git tag -f lilerong
查看相应标签的版本信息
git show tagName //git show 命令,并连同显示打标签时的提交对象
idea 中创建标签 tag、并推送到远程仓库
创建 tag
创建完成后,推送标签到远程仓库
接着输入 tag 名(一般都是有规则的 不是随便写的)
由于不是在当前最新版本打入的标签,push 时需要选择 push tags (all),不然不能 push。
在 GitLab 标签中就可以看到刚才 push 的标签
版权声明: 本文为 InfoQ 作者【李浩宇/Alex】的原创文章。
原文链接:【http://xie.infoq.cn/article/474c4148daf21353c40e52d1f】。文章转载请联系作者。
评论