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

Git系列之git tag和ReleaseMilestone

以下是关于 Git Tag、Release 和 Milestone 的深度融合内容,并补充了关于 Git Tag 的所有命令、详细解释和指令实例,条理清晰,结合实际使用场景和案例。

1. Git Tag

1.1 定义

• Tag 是 Git 中用于标记特定提交(commit)的引用,通常用于标记版本发布点(如 v1.0.0)。

• 可以是轻量标签(lightweight tag)或附注标签(annotated tag)。

1.2 使用场景

• 标记版本发布点。

• 查看历史版本。

• 基于标签修复 Bug。

1.3 所有相关命令及详细解释

1.3.1 创建 Tag

• 轻量标签:

git tag <tag-name>


  ◦ 轻量标签只是一个指向特定提交的引用,不包含额外信息。

  ◦ 适用于临时标记或本地使用。

  ◦ 示例:

git tag v1.0.0


• 附注标签:

git tag -a <tag-name> -m "Tag message"


  ◦ 附注标签是一个完整的对象,包含标签名称、标签信息、签名和时间戳。

  ◦ 适用于正式版本发布。

  ◦ 示例:

git tag -a v1.0.0 -m "Release version 1.0.0"


• 对历史提交打 Tag:

git tag -a <tag-name> <commit-hash> -m "Tag message"


  ◦ 对历史提交打标签,适用于标记过去的提交。

  ◦ 示例:

git tag -a v1.0.0 abc1234 -m "Release version 1.0.0"


1.3.2 查看 Tag

• 列出所有 Tag:

git tag


  ◦ 列出所有本地标签。

  ◦ 示例:

git tag


• 查看 Tag 详细信息:

git show <tag-name>


  ◦ 查看标签的详细信息,包括标签信息和对应的提交内容。

  ◦ 示例:

git show v1.0.0


1.3.3 推送 Tag

• 推送单个 Tag:

git push origin <tag-name>


  ◦ 将指定标签推送到远程仓库。

  ◦ 示例:

git push origin v1.0.0


• 推送所有 Tag:

git push origin --tags


  ◦ 将所有本地标签推送到远程仓库。

  ◦ 示例:

git push origin --tags


1.3.4 删除 Tag

• 删除本地 Tag:

git tag -d <tag-name>


  ◦ 删除本地标签。

  ◦ 示例:

git tag -d v1.0.0


• 删除远程 Tag:

git push origin --delete <tag-name>


  ◦ 删除远程仓库中的标签。

  ◦ 示例:

git push origin --delete v1.0.0


1.3.5 检出 Tag

• 切换到标签对应的提交:

git checkout <tag-name>


  ◦ 切换到标签对应的提交。

  ◦ 注意:标签是一个不可变的快照,检出标签后会进入“分离头指针”状态。

  ◦ 示例:

git checkout v1.0.0


1.3.6 基于 Tag 创建分支

• 在标签基础上创建新分支:

git checkout -b <branch-name> <tag-name>


  ◦ 基于标签创建一个新的分支,方便在标签基础上继续开发。

  ◦ 示例:

git checkout -b hotfix-v1.0.0 v1.0.0


1.3.7 重命名 Tag

• 重命名标签:
Git 不支持直接重命名标签,可以通过以下步骤实现:

  1. 删除旧标签:

git tag -d <old-tag-name>


  2. 创建新标签:

git tag -a <new-tag-name> <commit-hash> -m "New tag message"


  3. 推送新标签:

git push origin <new-tag-name>


  ◦ 示例:

git tag -d v1.0.0
git tag -a v1.0.1 abc1234 -m "Renamed tag to v1.0.1"
git push origin v1.0.1


2. GitHub/GitLab Release

2.1 定义

• Release 是基于 Git tag 的高级功能,通常用于发布软件的正式版本。

• 除了包含 tag 信息外,还可以附加发布说明、二进制文件(如编译后的可执行文件)等。

2.2 使用场景

• 发布正式版本。

• 提供详细的发布说明。

• 分发二进制文件(如安装包、压缩包)。

2.3 创建 Release

在 GitHub 上创建 Release

1. 进入仓库的 Releases 页面。

2. 点击 Draft a new release。

3. 选择或创建一个 tag(如 v1.0.0)。

4. 填写标题和发布说明。

5. 上传二进制文件(如 .zip 或 .exe)。

6. 点击 Publish release。

使用 Git 命令行创建 Release

通过 GitHub API 创建 Release:

curl -X POST -H "Authorization: token YOUR_GITHUB_TOKEN" \
-d '{"tag_name": "v1.0.0", "name": "Release v1.0.0", "body": "Initial release", "draft": false, "prerelease": false}' \
https://api.github.com/repos/OWNER/REPO/releases


3. Milestone

3.1 定义

• Milestone 是项目管理中的功能,用于跟踪一组相关任务(issues 或 pull requests)的进度。

• 通常与项目的阶段性目标或版本发布相关联。

3.2 使用场景

• 规划版本发布的目标。

• 跟踪任务的完成进度。

• 管理阶段性目标。

3.3 创建 Milestone

在 GitHub 上创建 Milestone

1. 进入仓库的 Issues 页面。

2. 点击 Milestones。

3. 点击 New milestone。

4. 填写名称(如 v1.0.0 Release)、描述和截止日期。

5. 点击 Create milestone。

将 Issue 或 Pull Request 关联到 Milestone

• 在 Issue 或 PR 页面,选择 Milestone 并关联到目标 Milestone。

4. Tag、Release 和 Milestone 的区别

功能    Tag    Release    Milestone
定义    标记特定提交的引用    基于 Tag 的正式发布,包含附加信息    用于跟踪一组任务的阶段性目标
内容    提交的引用(轻量或附注)    Tag 信息、发布说明、二进制文件    任务列表、进度、截止日期
用途    标记版本点、查看历史版本    发布正式版本、分发二进制文件    规划版本目标、跟踪任务进度
关联性    与提交直接关联    基于 Tag,可能关联 Milestone    与 Issue 或 PR 关联
工具支持    Git 原生支持    GitHub/GitLab 提供支持    GitHub/GitLab 提供支持

5. 综合使用场景

场景:发布 v1.0.0 版本

1. 规划目标:

  • 创建 Milestone v1.0.0 Release,关联相关 Issues 和 PRs。

  • 设置截止日期,跟踪任务完成进度。

2. 开发与测试:

  • 完成所有关联的任务,确保代码通过测试。

3. 打 Tag:

  • 在最终提交上打 Tag:

git tag -a v1.0.0 -m "Release version 1.0.0"
git push origin v1.0.0


4. 创建 Release:

  • 在 GitHub 上基于 v1.0.0 创建 Release。

  • 填写发布说明,上传二进制文件(如安装包)。

5. 完成 Milestone:

  • 关闭所有关联的 Issues 和 PRs。

  • 标记 Milestone 为完成。

6. 总结

• Tag:用于标记提交,是版本管理的基础。

• Release:基于 Tag 的正式发布,包含附加信息和二进制文件。

• Milestone:用于规划版本目标和跟踪任务进度。

在实际项目中,这三者通常结合使用:

• 通过 Milestone 规划版本目标。

• 通过 Tag 标记版本点。

• 通过 Release 发布正式版本。

通过合理使用这些功能,可以更好地管理项目的版本历史和发布流程。


参考文章:

Git系列详细介绍和操作

 

相关文章:

Git系列之git tag和ReleaseMilestone

以下是关于 Git Tag、Release 和 Milestone 的深度融合内容&#xff0c;并补充了关于 Git Tag 的所有命令、详细解释和指令实例&#xff0c;条理清晰&#xff0c;结合实际使用场景和案例。 1. Git Tag 1.1 定义 • Tag 是 Git 中用于标记特定提交&#xff08;commit&#xf…...

考研机试常见基本题型

1、求100以内的素数 sqrt()函数在cmath头文件中。 #include <iostream> #include <cmath> using namespace std;int main() {int count 0; // 用于统计素数的个数// 遍历 100 到 200 之间的每一个数for (int num 100; num < 200; num) {bool isPrime true…...

Android AudioFlinger(四)—— 揭开PlaybackThread面纱

前言&#xff1a; 继上一篇Android AudioFlinger&#xff08;三&#xff09;—— AndroidAudio Flinger 之设备管理我们知道PlaybackThread继承自Re’fBase&#xff0c; 在被第一次引用的时候就会调用onFirstRef&#xff0c;实现如下&#xff1a; void AudioFlinger::Playbac…...

C语言基础系列【20】内存管理

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1f…...

JavaScript基础-递增和递减运算符

在JavaScript编程中&#xff0c;递增&#xff08;&#xff09;和递减&#xff08;--&#xff09;运算符是用于对数值进行加一或减一操作的基础工具。它们简洁且强大&#xff0c;但如果不正确地使用&#xff0c;可能会导致混淆或错误。本文将详细介绍这两种运算符的不同形式及其…...

计算机毕业设计SpringBoot+Vue.js社区医疗综合服务平台(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

3.6c语言

#define _CRT_SECURE_NO_WARNINGS #include <math.h> #include <stdio.h> int main() {int sum 0,i,j;for (j 1; j < 1000; j){sum 0;for (i 1; i < j; i){if (j % i 0){sum i;} }if (sum j){printf("%d是完数\n", j);}}return 0; }#de…...

Unity开发——CanvasGroup组件介绍和应用

CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染顺序的组件。 一、常用属性的解释 1、alpha&#xff1a;控制UI的透明度 类型&#xff1a;float&#xff0c;0.0 ~1.0&#xff0c; 其中 0.0 完全透明&#xff0c;1.0 完全不透明。 通过调整alpha值可以实现UI的淡入淡…...

深度学习驱动的跨行业智能化革命:技术突破与实践创新

第一章 深度学习的技术范式演进与核心架构 1.1 从传统机器学习到深度神经网络的跨越 深度学习的核心在于通过多层次非线性变换自动提取数据特征,其发展历程可划分为三个阶段:符号主义时代的规则驱动(1950s-1980s)、连接主义时代的浅层网络(1990s-2000s)以及深度学习时代…...

php配置虚拟主机

在PHP中配置虚拟主机&#xff0c;通常是通过Apache或Nginx等Web服务器来进行设置的。下面我将分别介绍如何在Apache和Nginx中配置PHP虚拟主机。 1. Apache 配置虚拟主机 Apache是最常用的Web服务器之一&#xff0c;配置虚拟主机的步骤如下&#xff1a; 步骤一&#xff1a;确保A…...

RESTful API 设计指南

RESTful API 介绍 大佬的总结&#xff1a;RESTful API 设计指南 - 阮一峰的网络日志 json-server github地址 这里介绍一个快速搭建 REST API 服务的工具包 接口测试工具 介绍几个接口测试工具 apipost apifox postman https://www.apipost.cn/ (中文) https://www.apifox…...

在虚拟机上安装Hadoop

以下是在虚拟机上安装Hadoop的一般步骤&#xff1a; 准备工作 - 安装虚拟机软件&#xff1a;如VMware Workstation或VirtualBox等。 - 创建虚拟机&#xff1a;选择合适的操作系统镜像&#xff0c;如Ubuntu或CentOS等Linux发行版&#xff0c;为虚拟机分配足够的CPU、内存和磁盘…...

大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。

大白话JavaScript实现一个函数&#xff0c;将字符串中的每个单词首字母大写。 答题思路 理解需求&#xff1a;要写一个函数&#xff0c;它能接收一个字符串&#xff0c;然后把这个字符串里每个单词的第一个字母变成大写。分解步骤 拆分单词&#xff1a;一般单词之间是用空格隔…...

【VUE2】第三期——样式冲突、组件通信、异步更新

目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …...

深度学习代码解读——自用

代码来自&#xff1a;GitHub - ChuHan89/WSSS-Tissue 借助了一些人工智能 2_generate_PM.py 功能总结 该代码用于 生成弱监督语义分割&#xff08;WSSS&#xff09;所需的伪掩码&#xff08;Pseudo-Masks&#xff09;&#xff0c;是 Stage2 训练的前置步骤。其核心流程为&a…...

Linux 配置静态 IP

一、简介 在 Linux CentOS 系统中默认动态分配 IP 地址&#xff0c;每次启动虚拟机服务都是不一样的 IP&#xff0c;因此要配置静态 IP 地址避免每次都发生变化&#xff0c;下面将介绍配置静态 IP 的详细步骤。 首先先理解一下动态 IP 和静态 IP 的概念&#xff1a; 动态 IP…...

Oxidized收集H3C交换机网络配置报错,not matching configured prompt (?-mix:^(<CD>)$)

背景&#xff1a;问题如上标题&#xff0c;H3C所有交换机配置的model都是comware 解决方案&#xff1a; 1、找到compare.rb [rootoxidized model]# pwd /usr/local/lib/ruby/gems/3.1.0/gems/oxidized-0.29.1/lib/oxidized/model [rootoxidized model]# ll comware.rb -rw-r--…...

RAG技术深度解析:从基础Agent到复杂推理Deep Search的架构实践

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

6.过拟合处理:确保模型泛化能力的实践指南——大模型开发深度学习理论基础

在深度学习开发中&#xff0c;过拟合是一个常见且具有挑战性的问题。当模型在训练集上表现优秀&#xff0c;但在测试集或新数据上性能大幅下降时&#xff0c;就说明模型“记住”了训练数据中的噪声而非学习到泛化规律。本文将从实际开发角度系统讲解如何应对过拟合&#xff0c;…...

【玩转23种Java设计模式】结构型模式篇:组合模式

软件设计模式&#xff08;Design pattern&#xff09;&#xff0c;又称设计模式&#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...