【Git教程】(九)版本标签 —— 创建、查看标签,标签的散列值,将标签添加到日志输出中,判断标签是否包含特定的提交 ~

Git教程 · 版本标签(tag)

  • 1️⃣ 创建标签
  • 2️⃣ 查看存在的标签
  • 3️⃣ 标签的散列值
  • 4️⃣ 将标签添加到日志输出中
  • 5️⃣ 判断tag是否包含特定的提交
  • 🌾 总结

大多数项目都是用 1.7.3.2和 “ gingerbread” 这样的数字或名称来标识软件版本的。在 Git 中,我们可以用标签 (tag) 来做这件事。

在这里插入图片描述


1️⃣ 创建标签

标签化某次提交

  1. 创建一个普通的标签
    在下面的例子中,我们会为 master 分支上的当前版本创建一个名为 1.2.3.4 的标签,并 将其注释为“Freshly built.”。
> git tag 1.2.3.4 master -m "Freshly built." 
  1. 推送某单一标签
    推送操作通常不会自动传送标签。但如果我们明确指定了某个标签名,该标签就可以
    被传送了。
> git push origin 1.2.3.4

另外,使用带 -tags 参数的 push 命令也可以用来推送被传送分支的标签。

> git push --tags

如果我们在这里使用了 GnuPG ( 即Gnu Privacy Guard,简称GnuPG 或 GPG, 是一种公私密钥加密方式。用户可通过某种数字证书生成一对公私密钥,以此来确保数据的安全传输) , 可以通过-s 参数来提供该标签所带的数字签名。当然,这个前提是我们已经在 Git 中输入了默认 EMail 地址,而该地址同时也是注册 GnuPG 时所用的用户ID。

> git tag 1.2.3.4 master -s -m "Signed."

请注意! 如果你创建标签时使用了 -m-a-s-u 这些参数,Git 会将在版本库中将标签 作为一个独立对象来创建。该对象中会包含相关用户以及创建时间等信息。而要是如果没有使用这些选项,Git 就只会创建一个所谓的轻量级标签,其中只有用于识别的提交散列值。


2️⃣ 查看存在的标签

如果我们不带任何参数地调用 tag 命令,就会列出当前所有的标签。这可能会是一个长长的清单。对此,我们可以通过 -l
参数使用像 1.2.* 这样的表达模式来减少输出。

> git tag -l 1.2.*
1.2.0.0 Beginning.
1.2.3.3 New build.
1.2.3.4 Recently built.

3️⃣ 标签的散列值

我们可以通过带 --tags 参数的 show-ref 命令来列出标签对象的提交散列值。另外,你也可以通过 -dereference 参数同时打印出其相应提交对象的散列值,它们将会被打上 ^{} 标记。

> git show-ref --dereference --tags
...
f63cd7181787c9973788a97648796468cec474aa  refs/tags/1.2.3.3
cef89bbd712laac3cc38fe3a342045c9401bd6b9  refs/tags/1.2.3.3^{}
4a0228bdd0ab5e0180422c82bf706c42671a8laf  refs/tags/1.2.3.4
cef89bbd712laac3cc38fe3a342045c9401bd6b9  refs/tags/1.2.3.4^{}

4️⃣ 将标签添加到日志输出中

我们可以使用带 -decorate 参数的 log 命令标签与各提交的分支。

> git log --oneline --decorate
cef89bb (HEAD, tag: 1.2.3.4) Again, everything rebuilt.
9d4caed Merge branch 'Other'.	
dcd1c6c Changed.
ccela68 (tag:1.2.3.3)Something changed	

5️⃣ 判断tag是否包含特定的提交

我们常常会面临一个问题,就是要判断某一特定的功能或 bug 修复是否被包含在客户所安装的那个版本中。如果其对应的提交是已知的,问题显然很容易回答。用带 -contains 参数的 tag 命令就可以列出历史记录中包含该提交的所有标签。

> git tag --contains f63cd71
1.2.3.3
1.2.3.4

请注意! 如果有一些提交曾经被复制过,就有可能会对上述结果产生误导。例如,如果 这些版本是通过捡取操作被放在一起的,要想找出特定修改是否包括在内就非常麻烦了。对此,我们可以用 log 命令时在特定标签后面加上对注释内容的搜索。

> git log --oneline 1.2.3.3 | grep "a comment."

但这也只有在我们所添加的注释中包含了能用于识别修改的信息时才行得通,这需要我们往其中添加有意义的注释或者 bug 跟踪管理系统中的ID 。另外,这也是我们应该避免复制提交的重要理由之一。

注意,如果我们需要一个可移动的标志,比如用来标识区分当前生产环境中已上线/未上线的状态,那么应当使用一个分支,而不是标签。

🌾 总结

  • 创建标签:即用 tag 命令来创建标签。
  • 推送:push 命令可以只用来传送那些被明确指定的标签,例如这样 git push origin 1.2.3.4, 当然,如果我们使用了-tags 参数就不用指定标签了。
  • 拉回与获取pullfetch 这两个命令都会自动获取其所涉及分支中的所有标签,除非我们在命令中使用了--no-tags 参数。
  • 显示所有标签:这件事可以通过 git tag -l 命令来完成。
  • 在日记中显示标签:我们可以使用 git log-decorate 命令。
  • 共享标签中的提交:如果想要知道某一标签中是否包含了某一提交,我们可以用带 -contains 参数的 tag 命令。


温习回顾上一篇(点击跳转)
《【Git教程】(八)版本库间的交换 —— 版本库的克隆与命名,分支监控、命名、拉取及推送 ~》

继续阅读下一篇(点击跳转)
《【Git教程】(十)版本库之间的依赖 —— 项目与子模块之间的依赖、与子树之间的依赖 ~》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/616740.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CS学习(九)—— 分支实现

if-else 18&#xff1a;若y<x&#xff0c;跳转L2 22&#xff1a;否则&#xff0c;跳转L3。 goto 可见&#xff0c;与if-else类似。但是用goto很low。 条件表达式 又是与if类似&#xff0c;那有没有区别&#xff1f; 当然&#xff0c;条件表达式两个式子都会计算&…

[C++][算法基础]Dijkstra求最短路径I(稠密图)

给定一个 n 个点 m 条边的有向图&#xff0c;图中可能存在重边和自环&#xff0c;所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离&#xff0c;如果无法从 1 号点走到 n 号点&#xff0c;则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整…

Linux的学习之路:9、冯诺依曼与进程(1)

摘要 本章主要是说一下冯诺依曼体系结构和进程的一部分东西。 目录 摘要 一、冯诺依曼体系结构 二、操作系统的概念 三、设计OS的目的 四、管理 五、进程的基本概念 六、PCB 七、在Linux环境下查看进程 八、使用代码创建进程 九、思维导图 一、冯诺依曼体系结构 如…

【新版】系统架构设计师 - 知识点 - 面向对象开发方法

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 知识点 - 面向对象开发方法面向对象开发方法面向对象的分析需求模型分析模型 面向对象的设计 用例模型关系、UML事务关系、类的关系 架构 - 知识点 - 面向对象开发方法 面向对象开发方法 分析阶段…

嵌入式实时操作系统的调度机制与优化

大家好&#xff0c;今天给大家介绍嵌入式实时操作系统的调度机制与优化&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 嵌入式实时操作系统的调度机制与优化 一、引言 嵌入式实…

SpringBoot3整合Mybatis plus

Java版本&#xff1a;17 Spring Boot版本&#xff1a;3.1.10 Mybatis plus版本&#xff1a;3.5.5 源码地址&#xff1a;Gitee仓库 01 创建我们的项目工程 首先&#xff0c;我们创建一个maven工程spring-boot3-demo&#xff0c;pom文件配置如下。 这里我们将spring-boot-start…

【C Hash Map from Redis】

将Redis源码中的哈希表底层逻辑提取&#xff0c;并进行最小demo级测试将对应文件抽出&#xff0c;通过宏替换等方式保证源码编译通过main.c编写测试demo &#xff0c;注册哈希函数和值比较函数&#xff08;必选项&#xff09; /* Hash Tables Implementation.** This file imp…

2024/4/11 直流电机调速/PWM

一、直流电机简介和PWM原理 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极&#xff0c;当电极正接时&#xff0c;电机正转&#xff0c;当电极反接时&#xff0c;电机反转 直流电机主要由永磁体&#xff08;定子&#xff09;、线圈&#xff08;转子&…

VulNyx - Ready

目录 信息收集 arp nmap nikto Redis未授权访问漏洞 漏洞扫描 redis-cli 写入公钥 ssh连接 get root.txt 信息收集 arp ┌─[rootparrot]─[~/vulnyx] └──╼ #arp-scan -l Interface: enp0s3, type: EN10MB, MAC: 08:00:27:16:3d:f8, IPv4: 192.168.9.102 Starti…

Docker快速上手及常用命令速查

Docker快速上手 安装 在ubuntu上安装docker: sudo apt-get install docker docker -v #查看版本在centos7上安装docker&#xff1a;(docker在YUM源的Extras仓库中) yum install docker systemctl start dockerdocker常用命令速查 #查看docker信息 docker info #查看本地镜…

JavaScript中的Blob、Buffer、ArrayBuffer和TypedArray详解

文章的更新路线&#xff1a;JavaScript基础知识-Vue2基础知识-Vue3基础知识-TypeScript基础知识-网络基础知识-浏览器基础知识-项目优化知识-项目实战经验-前端温习题&#xff08;HTML基础知识和CSS基础知识已经更新完毕&#xff09; 正文 摘要&#xff1a;本文详细介绍了JavaS…

Linux安装和管理程序

1. Linux 软件包封装类型&#xff1a; &#xff08;1&#xff09;RPM/DEB软件包&#xff1a; REHL、CentOS、OpenSUSE等系列系统支持 Ubuntu、Debian等系列系统支持 软件包名称格式XXX.rpmXXX.deb管理命令rpm yumdpkg apt-get &#xff08;2&#xff09;源代码软件包&…