【Git】四、标签管理
文章目录
- Ⅰ. 理解标签
- Ⅱ. 创建标签
- ① 轻量级标签
- ② 含附注类标签
- Ⅲ. 操作标签
Ⅰ. 理解标签
标签 tag ,可以简单的理解为是 对某次 commit 的一个标识,相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次 commit 起一个 v1.0 这样的标签来标识里程碑的意义。
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。
所以,标签是版本库的一个快照。
Git 的标签虽然是版本库的快照,但它 其实就是指向某个 commit 的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的,速度非常快!
Git有commit,为什么还要引入tag? “请把上周一的那个版本打包发布,
commit号是6a5819e…” “一串乱七八糟的数字不好找!”
如果换一个办法:
“请把上周一的那个版本打包发布,版本号是
v1.2” “好的,按照
tagv1.2查找commit就行!” 所以,
tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。
Ⅱ. 创建标签
Git 使用的标签有两种类型: 轻量级的(lightweight) 和 含附注的(annotated)。
轻量级标签就像是个不会变化的分支,实际上它就是个指向特定提交对象的 引用。
而含附注标签,实际上是存储在仓库中的一个 独立对象,它有自身的校验和信息,包含着标签的名字,电子邮件地址和日期,以及标签说明,标签本身也允许使用 GNU Privacy Guard (GPG) 来签署或验证。
一般我们都建议使用含附注型的标签,以便保留相关信息;当然,如果只是临时性加注标签,或者不需要旁注额外信息,用轻量级标签也没问题。
① 轻量级标签
在 Git 中打标签非常简单,首先,切换到需要打标签的分支上:
[liren@VM-8-7-centos remote-test]$ git branch
* master
然后,敲命令 git tag [name] 就可以打一个新标签:
[liren@VM-8-7-centos remote-test]$ git tag v1.0
并且可以使用命令 git tag 查看所有标签:
[liren@VM-8-7-centos remote-test]$ git tag
v1.0
默认标签是打在最新提交的 commit 上的。那如何在指定的 commit 上打标签呢❓❓❓
方法是 找到历史提交的 commit id,然后打上就可以了,示例如下:
[liren@VM-8-7-centos remote-test]$ git log --pretty=oneline --abbrev-commit
f167d57 update file.txt.
221511a add file.txt
e7f4971 Initial commit
[liren@VM-8-7-centos remote-test]$ git tag v0.9 f167d57
[liren@VM-8-7-centos remote-test]$ git tag
v0.9
v1.0
注意,标签是按字母排序的,而不是按时间顺序列出的。
我们可以用 git show [tagname] 查看标签信息。
[liren@VM-8-7-centos remote-test]$ git show v1.0
commit f167d579b2f9d07aa8b2b467192e667b98f9353c
Author: 利刃大大 <2916776007@qq.com>
Date: Thu Jul 13 09:56:12 2023 +0000update file.txt.Signed-off-by: 利刃大大 <2916776007@qq.com>diff --git a/file.txt b/file.txt
index 8d0e412..94a1c74 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +1,2 @@hello git
+add new line;
\ No newline at end of file
② 含附注类标签
Git 还提供可以创建带有说明的标签,用 -a 选项 指定标签名,-m 指定说明文字,格式为:
git tag -a [name] -m "XXX" [commit_id]
另外,打完标签之后,使用 tree .git 命令查看一下本地库,可以看到 tags 其实就在 .git/refs/ 目录下:
……
|-- ORIG_HEAD
|-- packed-refs
`-- refs|-- heads| `-- master|-- remotes| `-- origin| |-- HEAD| `-- master`-- tags #如果打印出来其实就是对应的commit id|-- v0.9`-- v1.0
Ⅲ. 操作标签
如果标签打错了,可以使用 -d 选项来进行删除:
[liren@VM-8-7-centos remote-test]$ git tag
v0.9
v1.0
[liren@VM-8-7-centos remote-test]$ git tag -d v0.9 # 删除v0.9标签
Deleted tag 'v0.9' (was f167d57)
[liren@VM-8-7-centos remote-test]$ git tag
v1.0
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令 git push origin <tagname>
[liren@VM-8-7-centos remote-test]$ git tag
v1.0
[liren@VM-8-7-centos remote-test]$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To git@gitee.com:lirendada/remote-test.git* [new tag] v1.0 -> v1.0
此时,查看远端码云,看到了标签已经被更新!

当然,如果你本地有很多标签,也可以一次性的全部推送到远端:
git push origin --tags
💥如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
[liren@VM-8-7-centos remote-test]$ git tag
v1.0
[liren@VM-8-7-centos remote-test]$ git tag -d v1.0
Deleted tag 'v1.0' (was f167d57)
然后,从远程删除。删除命令也是 push,但是格式如下:
[liren@VM-8-7-centos remote-test]$ git push origin :refs/tags/v1.0
remote: Powered by GITEE.COM [GNK-6.4]
To git@gitee.com:lirendada/remote-test.git- [deleted] v1.0
在码云上查看确实删除成功!

相关文章:
【Git】四、标签管理
文章目录 Ⅰ. 理解标签Ⅱ. 创建标签① 轻量级标签② 含附注类标签 Ⅲ. 操作标签 Ⅰ. 理解标签 标签 tag ,可以简单的理解为是 对某次 commit 的一个标识,相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次 com…...
elementui中aria-hidden报错
浏览器检查的原因,不影响功能,但会在控制台报红 解决办法: 在对应元素设置display:none .el-radio__original {display: none !important;}...
DeepSeek 助力 Vue 开发:打造丝滑的表单验证(Form Validation)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
【MySQL】简单掌握数据类型与表操作,让数据库性能飞跃
个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 目录 🌳一、数据类型 🍃1.数值类型 🍂整型类型 🍂浮点型类型 🍂定点数类型 🍃2.字符串类型 3.&am…...
JUC并发编程——Java线程(一)
文章目录 1. 线程的创建1.1 方法1: 直接使用Thread1.2 方法2:使用Runnable配合Thread1.3 方法3:FutureTask配合Thread 2. 线程运行2.1 原理2.2 常见方法2.2.1 start与run2.2.2 sleep与yield2.2.3 join2.2.4 interrupt 3. 主线程和守护线程4. …...
Python入门笔记3
ros小车亚博官网例子延时性基本上跑完了,发现自己一些基础Python语法还不熟悉。 本节学习循环: while\for\break\continue 1. while 循环 while 循环会在条件表达式为真时,重复执行一段代码块,直到条件表达式变为假。 格式&am…...
【SQL教程|07】sql中条件查询where用法示例
SQL WHERE 条件查询教程 在SQL中,WHERE 条件用于在 SELECT 语句后过滤结果集,只返回符合条件的记录。它帮助我们从大量数据中提取所需的信息。以下是使用 WHERE 条件的逐步指南。 1. 基本语法 SELECT [字段] FROM [表] WHERE [条件];SELECT:…...
项目实战(13)-双频RFID语音播报阅读器
一. 产品简介: 1、项目背景是在实际应用中需要读取射频标签ID,但是市面上这种标签类型不统一;有的频段是125KHz,高频的是13.56MHz。所以需要一个读卡模块实现这两种卡的识别读取。 2、板子核心处理器是STM32F407,显示…...
基本控制环节的幅频和相频特性
基本控制环节的幅频和相频特性 在控制系统中,不同类型的控制环节具有各自独特的动态特性。为了研究这些环节对信号的影响,通常需要分析其频率响应特性,即幅频特性和相频特性。以下对几种常见的基本控制环节进行逐一分析。 1. 比例环节 比例…...
vue3 ref和reactive的区别
在 Vue 3 中,ref 和 reactive 是两种用于创建响应式数据的 API,但它们的使用场景和实现方式有一些区别。用大白话来说,它们的区别可以这样理解: 1. ref:适合处理简单数据 是什么:ref 是用来包装一个基本类…...
Maven 构建报告与文档生成
Maven 是一种强大的构建工具,它不仅可以帮助我们构建和管理项目,还提供了生成项目报告和文档的功能。通过 Maven 的插件,我们可以自动生成代码文档(如 Javadoc),执行测试并生成测试报告,以及其他…...
复制内容到软件内部,软件内部内容不刷新
在Windows 10系统中,遇到复制内容后需要点击任务栏才能刷新软件内容的问题,可能是由于软件自身刷新机制、系统资源管理或显卡驱动等原因导致。以下是逐步解决方案 1. 检查软件设置 开启自动刷新功能:某些软件(如文件管理器、IDE、…...
C# 实现完善 Excel 不规则合并单元格数据导入
目录 功能完善 Excel与DataSet的映射关系 运行环境 Excel DCOM 配置 设计实现 组件库引入 方法更新 返回值 参数设计 打开数据源并计算Sheets 拆分合并的单元格 创建DataTable 将单元格数据写入DataTable 删除虚拟列 总结 功能完善 在我的文章 《C#实现Excel…...
C#功能测试
List 内部元素为引用 src[0]为"11" List<Source> src new List<Source>(); src.Add(new Source() { Name "1", Age 1, Description "1" }); src.Add(new Source() { Name "2", Age 2, Description "2"…...
C++17并行化加速STL算法——std::execution
C17 并行化STL算法 文章目录 C17 并行化STL算法概念环境准备工具类 并行算法 - 使用并行算法 - 执行策略总览选择标准详细介绍顺序执行 seq并行化顺序执行 par并行化乱序执行 par_unseq 并行算法 - 异常处理可以不使用并行算法并行算法 - 限制并行算法有哪些原有算法17引入新算…...
从sumsub获取用户图片
已经拿到了imageid 然后从哪个接口可以获取图片文件呢? 根据您的问题,我可以为您提供以下信息: 一旦您获得了imageId,您可以使用以下几个API接口来获取图片文件: 获取文档图片: Get document images GET https://api.sumsub.com/resources/inspections/{inspection…...
DeepSeek + Mermaid编辑器——常规绘图
下面这张图出自:由清华大学出品的 《DeepSeek:从入门到精通》。 作为纯文本生成模型,DeepSeek虽不具备多媒体内容生成接口,但其开放式架构允许通过API接口与图像合成引擎、数据可视化工具等第三方系统进行协同工作,最终…...
ARM64 Trust Firmware [五 ]
本章介绍 ATF 中的 Runtime Service 是如何定义和被调用的。 要了解 SMC,必须从 SMC 指令本身开始,其指令如下图: 指令格式为:SMC #<imm>,从官方文档了解到该指令只能在 EL1 以及更高的异常等级上调用ÿ…...
Excel核心函数VLOOKUP全解析:从入门到精通
一、函数概述 VLOOKUP是Excel中最重要且使用频率最高的查找函数之一,全称为Vertical Lookup(垂直查找)。该函数主要用于在数据表的首列查找特定值,并返回该行中指定列的对应值。根据微软官方统计,超过80%的Excel用户在…...
KTransformers如何通过内核级优化、多GPU并行策略和稀疏注意力等技术显著加速大语言模型的推理速度?
KTransformers通过内核级优化、多GPU并行策略和稀疏注意力等技术显著加速大语言模型的推理速度,具体体现在以下几个方面: 内核级优化: KTransformers采用了高效的内核级优化技术,包括对Transformer模型中的关键操作进行优化。例如…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
MeshGPT 笔记
[2311.15475] MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers https://library.scholarcy.com/try 真正意义上的AI生成三维模型MESHGPT来袭!_哔哩哔哩_bilibili GitHub - lucidrains/meshgpt-pytorch: Implementation of MeshGPT, SOTA Me…...
统计学(第8版)——统计抽样学习笔记(考试用)
一、统计抽样的核心内容与问题 研究内容 从总体中科学抽取样本的方法利用样本数据推断总体特征(均值、比率、总量)控制抽样误差与非抽样误差 解决的核心问题 在成本约束下,用少量样本准确推断总体特征量化估计结果的可靠性(置…...
2025 后端自学UNIAPP【项目实战:旅游项目】7、景点详情页面【完结】
1、获取景点详情的请求【my_api.js】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http(/login/getWXSessionKey, {code,avatar}); };//…...
day51 python CBAM注意力
目录 一、CBAM 模块简介 二、CBAM 模块的实现 (一)通道注意力模块 (二)空间注意力模块 (三)CBAM 模块的组合 三、CBAM 模块的特性 四、CBAM 模块在 CNN 中的应用 一、CBAM 模块简介 在之前的探索中…...
VUE3 ref 和 useTemplateRef
使用ref来绑定和获取 页面 <headerNav ref"headerNavRef"></headerNav><div click"showRef" ref"buttonRef">refbutton</div>使用ref方法const后面的命名需要跟页面的ref值一样 const buttonRef ref(buttonRef) cons…...
