写点什么

【Git 技术专题】如何使用 git 中的 tag 进行版本开发控制?

发布于: 2021 年 08 月 04 日
【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 处理:

处理命令为:
git tag -a v1.0-beta -m "v1.0 beta版本发布上线"
复制代码
例如
git tag v1.0
复制代码


可加-m 添加注释

查看所有的 tag 版本

  • git tag :查看 tag 列表

  • git tag --list :查看 tag 列表

  • git tag -l :同理查看 tag 列表

下载 tag

git checkout v1.0
复制代码

删除 tag

git tag -d tagName
复制代码
删除本地名为“v1.0”的 Tag
git tag -d v1.0
复制代码


git push origin :refs/tags/<tagname> # 删除一个远程标签


这时只能在本地可以看到自己新建 Tag,在远程中央仓库中还是看不到在 Tags 下有如何内容,因为我们还没把它推送到中央仓库上

推送到远端

git push origin <tagname> # 推送一个本地标签到远程仓库


例如:


git push origin v1.0
复制代码
推送全部未推送过的本地标签
git push origin --tags 
复制代码


如果没有和远程没有同步,可以先拉下来


git pull --rebase origin master
复制代码

再上传

git push -u origin master
复制代码
推送所有标签
git push origin --tags
复制代码

此处对历史提交做 tag 处理

git log --pretty=oneline --abbrev-commitgit tag -a v0.9 -m "v0.9 版本发布上线" <commit-id> # 对历史提交做 tag 处理


15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support0d52aaab4479697da7686c15f77a3d64d9165190 one more thing6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function4682c3261057305bdd616e23b64b0857d832627b added a todo file166ae0c4d3f420721acbb115cc33848dfcc2121a started write support9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme
复制代码


现在,假设在 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 的标签

发布于: 2021 年 08 月 04 日阅读数: 13
用户头像

🏆2021年InfoQ写作平台-签约作者 🏆 2020.03.25 加入

👑【酷爱计算机技术、醉心开发编程、喜爱健身运动、热衷悬疑推理的”极客狂人“】 🏅 【Java技术领域,MySQL技术领域,APM全链路追踪技术及微服务、分布式方向的技术体系等】 我们始于迷惘,终于更高水平的迷惘

评论

发布
暂无评论
【Git技术专题】如何使用git中的tag进行版本开发控制?