1、标签介绍

软件的某个发行版本所对应的,其实就是软件开发过程中,某一个阶段的最后一次git commit提交。我们知道每一个提交操作,对应的都会生成一个commit-id,而标签就是与某一个commit-id绑定的名称。一个标签一旦与某一个commit-id绑定,那么该标签就不能修改绑定到其它commit-id了,除非将该标签删除后才可以与其commit-id绑定。

标签对象(tag object) 非常类似于一个提交对象,它包含一个标签创建者信息、一个日期、一段注释信息,以及一个指针。 主要的区别在于,标签对象通常指向一个提交对象,而不是一个树对象。 它像是一个永不移动的分支引用,永远指向同一个提交对象,只不过给这个提交对象加上一个更友好的名字罢了。

像其他版本控制系统(VCS)一样,Git 可以给仓库历史中的某一个提交打上标签,以示重要。 比较有代表性的是,人们会使用这个功能来标记发布结点( v1.0v2.0 等等),我们也可以称标签tag为里程碑。

2、列出标签

在 Git 中列出已有的标签非常简单,只需要输入 git tag (可带上可选的 -l 选项 --list):

$ git tag
v1.0
v2.0

这个命令以字母顺序列出标签,但是它们显示的顺序并不重要。

查看具体标签的详情,使用命令:git show 标名称

你也可以按照特定的模式查找标签。 例如,Git 自身的源代码仓库包含标签的数量超过 500 个。 如果只对1.8.5 系列感兴趣,可以运行:

$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5.1
v1.8.5.2
v1.8.5.3

提示:

如果你只想查看完整的标签列表,运行 git tag 命令,会默认以列表的方式展现版本库中的标签。

如果你提供了一个匹配标签名的通配模式,如上"v1.8.5*",那么 -l--list 选项就是强制要使用的。

3、创建标签

(1)标签的分类

Git 支持两种标签:轻量标签(lightweight)与附注标签(annotated

轻量标签:很像一个不会改变的分支,它只是某个特定提交的引用。

附注标签:轻量标签只有标签名称,而使用附注标签,还可以为标签添加说明。

  • 是存储在 Git 数据库中的一个完整对象, 它们是可以被校验的,其中包含打标签者的名字、电子邮件地址、日期时间, 此外还有一个标签信息,并且可以使用GNU Privacy GuardGPG)签名并验证。

    提示:GPG是一种加密算法,现在Github支持提交使用GPG加密,从而保证提交的数据,在传输的过程中没有被篡改。
  • 通常会建议创建附注标签,这样你可以拥有以上所有信息。
  • 但是如果你只是想用一个临时的标签, 或者因为某些原因不想要保存这些信息,那么也可以用轻量标签。
  • 创建附注标签,就会产生Git中的第四种对象:tag对象。

(2)附注标签

在 Git 中创建附注标签十分简单。

执行命令:git tag -a 标签名 -m '说明信息'

提示:这是在最新一次提交打上,打标签。即若不指定标签绑定的commit-id,则默认为HEAD指针所指向的提交。

-a选项意为"创建一个带注解的标签"。 (aannotated 的缩写)

不用-a 选项也可以执行的,但该标签不会记录这标签是什么时候打的,谁打的,也不会让你给该标签添加注解。

我推荐一直创建带注解的标签。

$ git tag -a v1.4 -m "my version 1.4"
$ git tag
v1.3
v1.4

-m 选项指定该标签的说明信息(必须)。

如果你创建标签的时候,没有指定说明信息,Git 会启动编辑器要求你输入信息。

通过使用 git show 命令,可以看到标签信息和与之对应的提交信息:

$ git show v1.4
tag v1.4
Tagger: Ben Straub <ben@straub.cc> # 打标记的人
Date: Sat May 3 20:19:12 2014 -0700 # 打标机的实际 my version 1.4 # 标记的说明信息 # 以下是标记所对应的commit对象的信息
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number

输出显示了打标签者的信息、打标签的日期时间、标记说明信息,然后显示具体的提交信息。

(3)轻量标签

轻量标签本质上是将提交校验和存储到一个文件中,而没有保存任何其他信息。

执行命令:git tag 标签名

创建轻量标签,不需要使用 -a-s(创建GPG签名)-m 选项,只需要提供标签名字:

$ git tag v1.4-lw
$ git tag
v1.3
v1.4
v1.4-lw

这时,如果在标签上运行 git show 命令,你不会看到额外的标签信息。

只会显示出对应的提交信息,如下:

$ git show v1.4-lw
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number

4、后期打标签

你也可以对过去的某个提交打标签。

版本库提交历史如下:

L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline --graph
* 3110083 (HEAD -> master) 第7次提交,完成dev分支的新功能
|\
| * e94af28 第6次提交,修改dev和readme文件
| * 9eb3224 第4次提交,dev分支开发 dev.txt文件
* | 0690030 第5次提交,新增内容:branch test v4
|/
* b97ccfd 第3次提交,新增内容:branch test v3
* f72a9fe 第2次提交,新增内容:branch test v2
* fa2439a 第1次提交,新增readme.txt文件

现在假设你在第3次提交的位置,忘记给项目打标签,你可以在后边的任何时间,在该位置补上标签。

但是要注意,第3次提交的校验和,要加入到命令之中。

执行命令:git tag -a 标签名 commit-id -m '说明信息'

# 1.打标签
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git tag -a v1.0 b97ccfd -m 'v1.0 里程碑' # 2.版本库提交历史
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git log --oneline --graph
* 3110083 (HEAD -> master) 第7次提交,完成dev分支的新功能
|\
| * e94af28 第6次提交,修改dev和readme文件
| * 9eb3224 第4次提交,dev分支开发 dev.txt文件
* | 0690030 第5次提交,新增内容:branch test v4
|/
* b97ccfd (tag: v1.0) 第3次提交,新增内容:branch test v3 # 看这行
* f72a9fe 第2次提交,新增内容:branch test v2
* fa2439a 第1次提交,新增readme.txt文件

我们在版本库的历史提交信息中,可以看到你已经在第3次提交上打上了标签。

我们再来查看一下,v1.0这个标签的信息。

$ git show v1.0
tag v1.0
Tagger: sun_wk <sun_wk@126.com>
Date: Sun Apr 18 17:12:53 2021 +0800 v1.0 里程碑 commit b97ccfd5f3e98c12ab9c0fb4ca4b308e6805f7ed (tag: v1.0)
Author: sun_wk <sun_wk@126.com>
Date: Fri Apr 16 22:07:47 2021 +0800 第3次提交,新增内容:branch test v3

提示:轻量标签执行命令:git tag 标签名 commit-id

『现学现忘』Git基础 — 36、标签tag(一)的更多相关文章

  1. 『现学现忘』Git基础 — 5、Git的协作模式

    目录 1.分布式工作流程 2.集中式工作流 3.分支工作流 4.GitFlow 工作流(最流行) 5.Forking 工作流(偶尔使用) 6.总结 1.分布式工作流程 与传统的集中式版本控制系统(CV ...

  2. 『现学现忘』Git基础 — 25、git log命令参数详解

    目录 1.git log命令说明 2.git log命令参数 (1)不带参数 (2)常用显示参数 (3)--pretty参数 (4)--date=参数 (5)筛选参数 git log命令主要用于查看G ...

  3. 『现学现忘』Git基础 — 37、标签tag(二)

    目录 5.共享标签 6.删除标签 7.修改标签指定提交的代码 8.标签在.git目录中的位置 9.本文中所使用到的命令 提示:接上一篇文章内容. 5.共享标签 默认情况下,git push 命令并不会 ...

  4. 『现学现忘』Git基础 — 10、配置Git用户签名说明

    目录 1.为什么要创建用户签名 2.为什么要在Git中配置这些信息 3.创建用户签名的方式 4.总结 1.为什么要创建用户签名 作为版本控制系统的客户端,每台客户机对版本库的所有提交操作,都需要注明操 ...

  5. 『现学现忘』Git基础 — 13、Git的基础操作

    目录 1.Git最基础的使用方式 (1)初始化本地版本库 (2)查看文件的状态 (3)把文件添加到暂存区 (4)把暂存区的内容提交到本地版本库 2.总结本文用到的Git命令 1.Git最基础的使用方式 ...

  6. 『现学现忘』Git基础 — 18、Git对象的总结

    目录 1.Git操作最基本的流程 2.工作目录中文件的状态 3.Git效率说明 提示:前面三篇文章已经分别的对blob对象.tree对象.commit对象进行了详细的说明,这篇文章我们总结一下,Git ...

  7. 『现学现忘』Git基础 — 21、git diff命令

    目录 1.git diff 命令说明 2.比较工作区与暂存区中文件的差别 3.比较暂存区与本地库中文件的差别 4.总结git diff命令常见用法 5.总结 1.git diff 命令说明 在comm ...

  8. 『现学现忘』Git基础 — 22、Git中文件重命名

    目录 1.用学过的命令进行文件重命名 2.使用git mv命令进行文件重命名 我们这篇文章来说说在Git中如何进行文件重命名. 提示一下,下面所说明的是对已经被Git管理的文件进行重命名,未被Git追 ...

  9. 『现学现忘』Git基础 — 1、版本控制系统介绍

    在具体了解Git之前,首先需要我们了解一下VCS,即版本控制系统(version control system) 1.什么是版本控制系统 版本控制是一种记录一个或若干个文件内容变化,以便将来查阅特定版 ...

随机推荐

  1. Logo小变动,心境大不同,SVG矢量动画格式网站Logo图片制作与实践教程(Python3)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_207 曾几何时,SVG(Scalable Vector Graphics)矢量动画图被坊间称之为一种被浏览器诅咒的技术,只因为糟糕 ...

  2. r0capture安卓应用层通杀脚本-使用文档

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! r0capture安卓应用层通杀脚本-使 ...

  3. 解读Gartner2022年组装式应用报告:从组装式企业到组装式应用

    摘要:"到2023年,采用组装式方法的组织在新特性交付速度比竞争对手快80%."Gartner 为什么未来的企业是组装式的? 物竞天择,适者生存,企业也是一样,在发展过程中,会为了 ...

  4. HTTP/3,它来了

    HTTP 3.0 是 HTTP 协议的第三个主要版本,前两个分别是 HTTP 1.0 和 HTTP 2.0 ,但其实 HTTP 1.1 我认为才是真正的 HTTP 1.0. 如果你对 HTTP 1.1 ...

  5. HCIA-Datacom 4.1 实验一:访问控制列表配置实验

    实验介绍 访问控制列表ACL(Access Control List)是由一条或多条规则组成的集合.所谓规则,是指描述报文匹配条件的判断语句,这些条件可以是报文的源地址.目的地址.端口号等.ACL本质 ...

  6. Web 前端模块出现的原因,以及 Node.js 中的模块

    模块出现原因 简单概述 随着 Web 2.0 时代的到来,JavaScript 不再是以前的小脚本程序了,它在前端担任了更多的职责,也逐渐地被广泛运用在了更加复杂的应用开发的级别上. 但是 JavaS ...

  7. flutter系列之:构建Widget的上下文环境BuildContext详解

    目录 简介 BuildContext的本质 BuildContext和InheritedWidget BuildContext的层级关系 总结 简介 我们知道Flutter中有两种Widget,分别是 ...

  8. Usmjeri(COCI2017.2)题解

    题意 给一棵N个节点的树,编号从1到N,再给定m对点(u,v),你要将树上的每条无向边变为有向边,使得给定的点对都满足u能到达v或v能到达u.问有多少种不同的方案,答案对(1e9+7)求余. 1 ≤ ...

  9. 第八十四篇:Vue购物车(五) 商品数量的增减

    好家伙, 1.商品数量的增减 我们把商品的数量增减独立出来,写成一个独立的组件Counter <template> <div class="number-container ...

  10. 数据库基础操作 part1

    初识数据库 数据库相关概念 数据库管理软件: 本质就是一个C/S架构的套接字程序 服务端套接字 客户端套接字 操作系统: Linux 操作系统: 随意 计算机(本地文件) 计算机硬件 应用流程: 服务 ...