当前位置: 首页 > news >正文

git基础-tagging

tagging

与大多数版本控制系统一样,Git具有将存储库历史中的特定点标记为重要tag的能力。通常,人们使用此功能来标记发布点(例如v1.0,v2.0等)。在本节中,将学习如何列出现有的标签,如何创建和删除标签,以及不同类型的标签是什么。

显示tag列表

该命令按字母顺序列出标签;它们显示的顺序没有真正的重要性。

还可以搜索与特定模式匹配的标签。例如

PS:

列出标签通配符需要使用 -l 或 --list 选项。

如果只想要整个标签列表,运行 git tag 命令会隐式地假设我们想要一个列表,并提供一个在这种情况下,使用 -l 或 --list 是可选的。

然而,如果提供了一个通配符模式来匹配标签名称,那么使用 -l 或 --list 是强制的。

创建标签

Git支持两种类型的标签:轻量级标签和附注标签。

轻量级标签非常类似于不会改变的分支——它只是指向特定提交的指针。

然而,附注标签存储为Git数据库中的完整对象, 他们是经过校验的,包含标签者的姓名、电子邮件和日期,有一个标签消息,并且可以使用GNU隐私保护(GPG)进行签名和验证。通常建议创建附注标签,以便可以获取所有这些信息

但如果需要一个临时标签或出于某种原因不想保留其他信息,轻量级标签也是可用的。

辅助标签

在Git中创建一个附注标签很简单。最简单的方法是在运行tag命令时指定 -a。

-m 参数指定了一个与标签一起存储的标签消息。如果没有为附注标签指定消息,Git会启动编辑器,以便输入消息。

可以使用 git show 命令查看标签数据以及被标记的提交。

这会显示标签者信息、标签日期以及注释信息,然后再显示提交信息。

轻量级标签

另一种打标签的方法是使用轻量级标签。这基本上就是将校验和存储在文件中 - 没有保留其他信息。要创建轻量级标签,不要提供任何 -a、-s 或 -m 选项,只需提供一个标签名称。

这一次,如果在标签上运行 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

Change version number

后期打签

可以针对某一commit id打签,我简单测试用仓库的提交历史如下:

可以针对commit id 7db1252补打标签,如下

推送标签到远程服务器

默认情况下,git push 命令不会将标签传输到远程服务器。在创建标签后,需要显式地将标签推送到共享服务器。这个过程就像更新远程分支一样 - 可以运行 git push origin <tagname>。

如果有很多标签需要一次性推送到远程,也可以使用 git push 命令的 --tags 选项。这将传输所有尚未存在于远程服务器上的标签。

删除标签

要在本地仓库中删除一个标签,可以使用 git tag -d <tagname> 命令。例如

请注意,这不会从任何远程服务器中删除标签。删除远程服务器上的标签有两种常见的变体。

第一种变体是 git push <remote> :refs/tags/<tagname>。

解释上述命令的方式是将冒号前的空值推送到远程标签名称,从而有效地删除它。

第二种(更直观的)删除远程标签的方法是使用

$ git push origin --delete <tagname>

检出标签

如果想查看标签对应的那个软件版本,可以通过 git checkout 来检出该标签,请留意这会将仓库置于 "detached HEAD" 状态,这会带来一些不良的副作用。

在 "detached HEAD" 状态下,如果进行更改然后创建一个提交,标签将保持不变,但新的提交将不属于任何分支,并且无法送达(除了通过确切的commit 哈希)。因此,如果需要进行更改,比如说要修复一个旧版本的 bug,通常会想要创建一个分支。

如果这样做并进行了提交,v2.0 分支将会与v2.0 标签略有不同,因为它将随着新更改向前移动,所以务必小心。

相关文章:

  • 【服务器】常见服务器高危端口
  • 爬取搜狗翻译项目实例
  • 网络协议栈--传输层--UDP/TCP协议
  • 简单的查看iPhone储存空间的几种方法,总有一种是你想要的
  • nginx mirror 流量镜像
  • [flask]http请求//获取请求头信息+客户端信息
  • 【C++】手撕哈希表的闭散列和开散列
  • Day08 Java复习8 Spring MVC概念
  • 蓝桥杯刷题-day5-动态规划
  • Chrome 插件打包发布
  • 单元测试框架 Junit
  • 本地项目连接gitee仓库
  • sheng的学习笔记-AI-人脸识别
  • 把本地文件上传到HDFS上操作步骤
  • 详细剖析多线程2----线程安全问题(面试高频考点)
  • 【Amaple教程】5. 插件
  • ES6语法详解(一)
  • If…else
  • JS变量作用域
  • PHP的类修饰符与访问修饰符
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Vue.js 移动端适配之 vw 解决方案
  • 彻底搞懂浏览器Event-loop
  • 电商搜索引擎的架构设计和性能优化
  • 回流、重绘及其优化
  • 蓝海存储开关机注意事项总结
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • HanLP分词命名实体提取详解
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​水经微图Web1.5.0版即将上线
  • #Z2294. 打印树的直径
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (多级缓存)缓存同步
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (算法)Travel Information Center
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .apk文件,IIS不支持下载解决
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .net反混淆脱壳工具de4dot的使用
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • :中兴通讯为何成功
  • @Builder用法
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • @在php中起什么作用?
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [20171113]修改表结构删除列相关问题4.txt
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略