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 的深度融合内容,并补充了关于 Git Tag 的所有命令、详细解释和指令实例,条理清晰,结合实际使用场景和案例。 1. Git Tag 1.1 定义 • Tag 是 Git 中用于标记特定提交(commit…...
考研机试常见基本题型
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面纱
前言: 继上一篇Android AudioFlinger(三)—— AndroidAudio Flinger 之设备管理我们知道PlaybackThread继承自Re’fBase, 在被第一次引用的时候就会调用onFirstRef,实现如下: void AudioFlinger::Playbac…...
C语言基础系列【20】内存管理
博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇…...
JavaScript基础-递增和递减运算符
在JavaScript编程中,递增()和递减(--)运算符是用于对数值进行加一或减一操作的基础工具。它们简洁且强大,但如果不正确地使用,可能会导致混淆或错误。本文将详细介绍这两种运算符的不同形式及其…...
计算机毕业设计SpringBoot+Vue.js社区医疗综合服务平台(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介: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:控制UI的透明度 类型:float,0.0 ~1.0, 其中 0.0 完全透明,1.0 完全不透明。 通过调整alpha值可以实现UI的淡入淡…...
深度学习驱动的跨行业智能化革命:技术突破与实践创新
第一章 深度学习的技术范式演进与核心架构 1.1 从传统机器学习到深度神经网络的跨越 深度学习的核心在于通过多层次非线性变换自动提取数据特征,其发展历程可划分为三个阶段:符号主义时代的规则驱动(1950s-1980s)、连接主义时代的浅层网络(1990s-2000s)以及深度学习时代…...
php配置虚拟主机
在PHP中配置虚拟主机,通常是通过Apache或Nginx等Web服务器来进行设置的。下面我将分别介绍如何在Apache和Nginx中配置PHP虚拟主机。 1. Apache 配置虚拟主机 Apache是最常用的Web服务器之一,配置虚拟主机的步骤如下: 步骤一:确保A…...
RESTful API 设计指南
RESTful API 介绍 大佬的总结:RESTful API 设计指南 - 阮一峰的网络日志 json-server github地址 这里介绍一个快速搭建 REST API 服务的工具包 接口测试工具 介绍几个接口测试工具 apipost apifox postman https://www.apipost.cn/ (中文) https://www.apifox…...
在虚拟机上安装Hadoop
以下是在虚拟机上安装Hadoop的一般步骤: 准备工作 - 安装虚拟机软件:如VMware Workstation或VirtualBox等。 - 创建虚拟机:选择合适的操作系统镜像,如Ubuntu或CentOS等Linux发行版,为虚拟机分配足够的CPU、内存和磁盘…...
大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。
大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。 答题思路 理解需求:要写一个函数,它能接收一个字符串,然后把这个字符串里每个单词的第一个字母变成大写。分解步骤 拆分单词:一般单词之间是用空格隔…...
【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原理 …...
深度学习代码解读——自用
代码来自:GitHub - ChuHan89/WSSS-Tissue 借助了一些人工智能 2_generate_PM.py 功能总结 该代码用于 生成弱监督语义分割(WSSS)所需的伪掩码(Pseudo-Masks),是 Stage2 训练的前置步骤。其核心流程为&a…...
Linux 配置静态 IP
一、简介 在 Linux CentOS 系统中默认动态分配 IP 地址,每次启动虚拟机服务都是不一样的 IP,因此要配置静态 IP 地址避免每次都发生变化,下面将介绍配置静态 IP 的详细步骤。 首先先理解一下动态 IP 和静态 IP 的概念: 动态 IP…...
Oxidized收集H3C交换机网络配置报错,not matching configured prompt (?-mix:^(<CD>)$)
背景:问题如上标题,H3C所有交换机配置的model都是comware 解决方案: 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.过拟合处理:确保模型泛化能力的实践指南——大模型开发深度学习理论基础
在深度学习开发中,过拟合是一个常见且具有挑战性的问题。当模型在训练集上表现优秀,但在测试集或新数据上性能大幅下降时,就说明模型“记住”了训练数据中的噪声而非学习到泛化规律。本文将从实际开发角度系统讲解如何应对过拟合,…...
【玩转23种Java设计模式】结构型模式篇:组合模式
软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 汇总目录链接&…...
MATLAB实战:用BEMD算法分解图像并提取特征(附完整代码)
MATLAB实战:二维经验模态分解(BEMD)在图像特征提取中的创新应用 当我们需要从一张X光片中识别微小病灶,或是从卫星图像中提取城市道路网络时,传统图像处理方法往往力不从心。二维经验模态分解(BEMD)就像给图像做"CT扫描"࿰…...
当地的美国展会搭建制作公司口碑排行
随着中国企业出海参展日益频繁,选择一家可靠的美国本土搭建商成为关键决策。许多企业主发现,直接对接海外供应商时,常面临沟通不畅、报价模糊、落地效果与设计图相差甚远等问题。这背后,是原有依赖单一信息渠道或熟人推荐的模式正…...
雷电模拟器装Magisk后,自带的文件管理器为啥打不开/data?用MT管理器一招搞定
雷电模拟器Magisk环境下文件管理器的权限困局与实战解决方案 当你在雷电模拟器中成功安装Magisk后,可能会遇到一个令人困惑的现象:原本可以自由访问系统目录的自带文件管理器,突然对/data和/system等关键路径"视而不见"。这并非模拟…...
从零到上线:用Vue3+AntV G2快速搭建企业级数据大屏
从零到上线:用Vue3AntV G2快速搭建企业级数据大屏 在数字化转型浪潮中,数据可视化已成为企业决策的重要支撑。想象这样一个场景:会议室里,高管们围坐在大屏前,实时业务数据通过动态图表清晰呈现,关键指标一…...
解锁风扇智能控制秘诀:静音散热与性能优化完全指南
解锁风扇智能控制秘诀:静音散热与性能优化完全指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fa…...
打破BIM模型Web化壁垒:Revit2GLTF的轻量化转换技术革新
打破BIM模型Web化壁垒:Revit2GLTF的轻量化转换技术革新 【免费下载链接】Revit2GLTF view demo 项目地址: https://gitcode.com/gh_mirrors/re/Revit2GLTF 在数字化建筑设计流程中,BIM模型的高效协作与展示一直是行业痛点。设计团队常常面临这样的…...
Linux服务器GPU环境配置避坑指南:从Nvidia驱动到PyTorch Lightning一站式搞定
Linux服务器GPU环境配置避坑指南:从Nvidia驱动到PyTorch Lightning一站式搞定 当你第一次在Linux服务器上配置GPU环境时,可能会遇到各种令人抓狂的问题:驱动安装失败、CUDA版本不兼容、PyTorch无法识别GPU...这些问题足以让任何一个开发者崩溃…...
EVE舰船配置神器Pyfa全攻略:从新手到专家的实战指南
EVE舰船配置神器Pyfa全攻略:从新手到专家的实战指南 【免费下载链接】Pyfa Python fitting assistant, cross-platform fitting tool for EVE Online 项目地址: https://gitcode.com/gh_mirrors/py/Pyfa 在EVE Online的浩瀚宇宙中,每一位舰长都需…...
从新手到专家:OpenCore配置工具OCAT的实战应用指南
从新手到专家:OpenCore配置工具OCAT的实战应用指南 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCAuxiliaryTools 如果你正在为黑苹果系…...
SVGnest智能排版优化器:5分钟掌握材料利用率翻倍的终极技巧
SVGnest智能排版优化器:5分钟掌握材料利用率翻倍的终极技巧 【免费下载链接】SVGnest An open source vector nesting tool 项目地址: https://gitcode.com/gh_mirrors/sv/SVGnest 想象一下,您是否经常在激光切割、CNC加工或3D打印中面临材料浪费…...
