使用gitflow时如何合并hotfix

前言
在使用 git flow 流程时, 对于项目型的部署项目经常会遇到一个问题, 就是现场项目在使用历史版本时发现的一些问题需要修复, 但升级可能会有很大的风险或客户不愿意升级, 这时就要求基于历史版本进行 hotfix 修复.
基于历史发布版本的缺陷修复方式不同于最新发布版本的补丁修复方式, 因为历史版本的分支再合并到 master 上, 可能目录结构及文件存在特别大的差异, 导致冲突无法正常的合并.
基于最新发布版本的合并
一般大家都知道, 如果在 master 最新的 tag 上发现了需要修复的问题, 直接基于需要修复的 tag 拉取分支进行修复, 修改完成后把代码合并到 master 中发补丁版本, 并合并( merge )到目前的 develop 或 release 分支中.
git checkout 6.0
git checkout -b hotfix/6.0.1
在 hotfix_version 分支中修复完成后, 合并到 master 发布 tag.
git checkout master
git merge hotfix/6.0.1
git tag 6.0.1
合并修改到 develop 或 release (主要看目前在哪个阶段), 示例为 develop 阶段
git checkout develop
git merge hotfix/6.0.1
git branch -d hotfix/6.0.1
后续 develop 分支合并到 master 后, develop 和 master 的日志图像会引用到 hotfix , 显示会比较乱, 如下图所示
* b66ca1b (tag: 2.0) Merge branch 'develop' ==> master 合并 develop
|\
| |
| * df20397 develop update 2
| * d0ed525 develop update 1
| * 778bd03 Merge branch 'hotfix-1.0.1' into develop ==> 引用到 hotfix-1.0.1 的修改
| |\
| * | 26a23fd git develop add a file t1.txt
* | | cb413a9 Merge branch 'hotfix-1.0.1' ==> master 合并 hotfix-1.0.1, 引用到了 hotfix-1.0.1 修改
|\ \ \
| | |/
| |/|
| * | 959dfc5 (hotfix-1.0.1) hotfix 1.0.1 update 2
| * | ecc876d hotfix 1.0.1 update1
|/ /
* | 679c836 this is a hotfix for 1.0.1
|/
* a27b457 (tag: current, tag: 1.0) add three line
* 72e54f1 add two line
* 5418748 add one line
可以使用 merge -squash 压缩 hotfix 到 develop 的合并, 日志图像显示会比较清晰, 如下图所示:
* 51ae281 (HEAD -> master) Merge branch 'develop'
|\
| * 5532d53 (develop) Squashed commit of the following: ==> develop 通过 squash 合并 hotfix-3.0.1, 没有引用 hotfix-3.0.1 修改
| * e9942da this is a develop update 2
| * efc9829 this is a develop update 1
* | ec8d038 Merge branch 'hotfix-3.0.1' ==> master 合并 hotfix-3.0.1
|\ \
| * | ccae1bf (hotfix-3.0.1) this is a hotfix-3.0.1 update 1
| * | d00da78 this is a hotfix 4.0.1
|/ /
|/
*
至此, 整个流程完成.
基于历史发布版本的合并
但是, 如果修复的 tag 是历史的版本, 需要引入 support 长期分支, 作用跟 master 类似, 用于发布 tag 版本.
git checkout 6.0
git checkout -b support/6.x
git checkout -b hotfix/6.0.1
在 hotfix_version 分支中修复完成后, 合并到 support 中发布 tag.
git checkout support/6.x
git merge hotfix/6.0.1
git branch -d hotfix/6.0.1
git tag 6.0.1
如果使用了 gitflow 命令行工具, 可以简化为:
git flow support start 6.x 6.0
git flow hotfix start 6.0.1 support/6.x
# 问题修复后
git flow hotfix finish 6.0.1
但是把 hotfix 的修改不能直接合并到 master 中, 会引起特别大的冲突. 所以要先合并到最新 develop 或 release 中, 不建议直接通过无参的 merge 命令合并, 会存在较长的日志引用路径.
建议使用 cherry-pick 或 merge -squash 进行合并.
git checkout develop
# 单个合并
git cherry-pick commitid
# 或使用 squash 合并
git merge -squash hotfix/6.0.1
DONE
相关文章:
使用gitflow时如何合并hotfix
前言 在使用 git flow 流程时, 对于项目型的部署项目经常会遇到一个问题, 就是现场项目在使用历史版本时发现的一些问题需要修复, 但升级可能会有很大的风险或客户不愿意升级, 这时就要求基于历史版本进行 hotfix 修复. 基于历史发布版本的缺陷修复方式不同于最新发布版本的补…...
(七)Spring源码解析:Spring事务
对于事务来说,是我们平时在基于业务逻辑编码过程中不可或缺的一部分,它对于保证业务及数据逻辑原子性立下了汗马功劳。那么,我们基于Spring的声明式事务,可以方便我们对事务逻辑代码进行编写,那么在开篇的第一部分&…...
Stable Diffusion 是否使用 GPU?
在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D数字孪生场景编辑器 Stable Diffusion 已迅速成为最流行的生成式 AI 工具之一,用于通过文本到图像扩散模型创建图像。但是,它需…...
DevOps平台两种实现模式
我们需要一个DevOps平台 要讨论DevOps平台的实现模式,似乎就必须讨论它们的概念定义。然而,当大家要讨论它们的定义时,就像在讨论薛定谔的猫。 A公司认为它不过是自动化执行Shell脚本的平台,有些人认为它是一场运动,另…...
Java 简单实现一个 UDP 回显服务器
文章目录 UDP 服务端UDP 客户端实现效果UDP 服务端(实现字典功能)总结 UDP 服务端 package network;import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException;public class UdpEchoServer {private Da…...
element ui中Select 选择器,自定义显示内容
正常情况下,下拉框选项展示内容,就是选择后展示的label内容 如图所示: 但是要想自定义选项内容,但是展示内容不是选项label的内容,可以在el-option标签内增加div进行自定义选项label展示,但选择后结果展示…...
机器视觉行业,日子不过了吗?都进入打折潮,双11只是一个借口,打广告出新招,日子不好过是真的
我就不上图了,大家注意各个机器视觉公司公众号,为什么打折?打广告也只是宣传手段,进入打折潮,内卷严重,价格战变成白刃战,肯定日子不好过了。...
【手动创建UIWindow Objective-C语言】
一、上节课,我们讲了控制器View的懒加载: 1.什么时候会调用这个懒加载呢,用我们直接,控制器self.view self.view的时候: 什么时候,调用它这个self.view, 就要去加载控制器的view, self.view 加载控制器的view 我们给大家演示过了,这个大家已经清楚了,我们给大家说…...
【学习辅助】Axure手机时间管理APP原型,告别手机控番茄任务模板
作品概况 页面数量:共 30 页 兼容软件:Axure RP 9/10,不支持低版本 应用领域:时间管理、系统工具 作品申明:页面内容仅用于功能演示,无实际功能 作品特色 本品为「手机时间管理」APP原型,…...
[PyTorch][chapter 62][强化学习-基本概念]
前言: 目录: 强化学习概念 马尔科夫决策 Bellman 方程 格子世界例子 一 强化学习 强化学习 必须在尝试之后,才能发现哪些行为会导致奖励的最大化。 当前的行为可能不仅仅会影响即时奖赏,还有影响下一步奖赏和所有奖赏 强…...
使用 Stable Diffusion Img2Img 生成、放大、模糊和增强
在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D数字孪生场景编辑器 Stable Diffusion 2022.1 Img5Img 于 2 年发布,是一款革命性的深度学习模型,正在重新定义和推动照片级真实…...
【Git】第一篇:Git安装(centos)
git查看安装版本 以我自己的centos7.6为例,我们可以输入以下指令查看自己是否安装了git. git --version安装了的话就会显示自己安装的版本。 git 安装 安装很简单,一条命令即可 sudo yum install git -ygit 卸载 sudo yum remove git -y...
在uniapp中通过自定义事件使页面之间传递数据
在uniapp中,可以使用uni.$emit来在页面之间传递数据。uni.emit是一个事件触发器,可以在一个页面中触发一个自定义事件,并在其他页面中监听和处理这个事件。 // A页面 uni.$emit(dataChanged, { message: Hello from A page! });在接收数据的…...
【Windows Docker:安装nginx】
拉镜像 docker pull nginx运行初始镜像 docker run -d -p 80:80 --name nginx nginx拷贝文件 docker cp nginx:/etc/nginx/nginx.conf D:/dockerFile/nginx/nginx.conf docker cp nginx:/etc/nginx/conf.d D:/dockerFile/nginx/conf.d docker cp nginx:/usr/share/nginx/htm…...
ElasticSearch7.x - HTTP 操作 - 查询文档操作
查询索引下的所有文档 http://192.168.254.101:9200/shopping/_search 条件查询 请求路径上添加条件:http://192.168.254.101:9200/shopping/_search?q=category:小米 请求体上添加条件:http://192.168.254.101:9200/shopping/_search 请求体内容 {"query" :{&qu…...
基于opencv+tensorflow+神经网络的智能银行卡卡号识别系统——深度学习算法应用(含python、模型源码)+数据集(一)
目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境OpenCV环境 相关其它博客工程源代码下载其它资料下载 前言 本项目基于从网络获取的多种银行卡数据集,采用OpenCV库的函数进行图像处理,并通过神经网络进行模型训练。最终实…...
如何使用`open-uri`模块
首先,我们需要使用open-uri模块来打开网页,并使用Nokogiri模块来解析网页内容。然后,我们可以使用Nokogiri的css方法来选择我们想要的元素,例如标题,作者,内容等。最后,我们可以使用open-uri模块…...
activiti7审批驳回,控制变量无法覆盖,导致无限循环驳回,流程无法结束
项目开发过程中使用工作流,因此考虑使用activiti7做完工作流引擎。项目开发过程中,发现流程驳回时,再次执行流程,控制变量无法覆盖,导致无限循环驳回,流程无法结束。流程图如下图所示: 驳回控制…...
世界互联网大会|云轴科技ZStack受邀分享云原生超融合
11月8日至10日“世界互联网大会乌镇峰会”在浙江嘉兴的乌镇开幕,大会的主题为“建设包容、普惠、有韧性的数字世界——携手构建网络空间命运共同体”,全球各界代表就热点焦点问题展开讨论,反映产业各界对互联网发展的前瞻思考,引领…...
k8s ingress基础
一、ingress 简介 在k8s集群中,service和pod的ip为内网ip,仅集群内部才可以访问。如果外部应用想要直接访问集群内的服务,就需要把外部请求通过负载均衡转发到service上,然后再由kube-proxy组件将其转发给后端pod。一般service可…...
从开题到答辩,AI全程辅助是一种怎样的体验?
2026年,毕业论文的写作方式已经发生了根本性变化。从开题到答辩,AI工具深度嵌入每一个环节,但这届毕业生也逐渐认清一个事实:AI是副驾驶,你才是驾驶员-1。以下是基于2026届毕业生真实经历的论文全程实录。 一、开题阶段…...
OpenClaw技能市场:Qwen3.5-9B增强的自动化模块扩展
OpenClaw技能市场:Qwen3.5-9B增强的自动化模块扩展 1. 为什么需要技能市场? 去年我接手了一个内容运营项目,每天要处理大量重复性工作:从多个渠道收集资料、整理成Markdown格式、发布到不同平台。手动操作不仅耗时,还…...
三维激光熔覆模拟技术:精准控制、高效制造的数字化解决方案
三维激光熔覆模拟最近在车间里看到工程师们调试激光熔覆设备时,我突然意识到这玩意儿和3D打印机完全不是一个难度级别——金属粉末被激光瞬间融化又凝固的过程,简直就是微观层面的魔法表演。今天咱们就来扒一扒这个魔法背后的代码咒语。先看这个温度场模…...
保姆级教程:在Ubuntu 20.04上搞定Ollama WebUI可视化界面(含Node.js 18.19.0安装避坑)
零基础在Ubuntu 20.04上部署Ollama WebUI全攻略 第一次在Linux服务器上部署Web应用?别担心,这篇教程会像老朋友一样手把手带你完成整个流程。我们将从最基础的环境检查开始,一步步安装Node.js、配置ollama-webui,直到最终在浏览器…...
FT232串口在Ubuntu22.04上不稳定?3步搞定驱动冲突问题
FT232串口在Ubuntu 22.04上的稳定性优化实战指南 当你正在调试一个物联网设备,突然发现串口连接莫名其妙断开,那种感觉就像在高速公路上爆胎——既突然又让人抓狂。Ubuntu 22.04作为当前LTS版本,本应提供稳定的开发环境,但FTDI芯片…...
OpenClaw网页前端开发与优化全流程指南
OpenClaw网页前端开发与优化全流程指南 🌐 核心价值:OpenClaw实现"需求→设计→代码→优化→部署"全流程自动化,开发效率提升600%,页面加载速度提升300%,SEO评分提升85%,完全兼容React/Vue/Angul…...
Halcon点云拼接实战:如何用特征模板搞定3D扫描缺失问题?
Halcon点云拼接实战:特征模板技术在工业3D扫描中的应用 在工业检测和逆向工程领域,3D扫描常常面临一个棘手问题——单次扫描无法完整捕获复杂物体的所有表面细节。想象一下,当您需要检测一个汽车发动机缸体的内部结构,或者重建一…...
如何彻底解决Windows快捷键冲突:Hotkey Detective完整指南
如何彻底解决Windows快捷键冲突:Hotkey Detective完整指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是…...
别再让MATLAB并行池浪费你的内存!保姆级教程教你手动精准管理Parallel Pool
MATLAB并行池内存优化实战:从自动管理到精准控制 在科学计算和工程仿真领域,MATLAB的Parallel Computing Toolbox无疑是提升运算效率的利器。但许多资深用户都曾经历过这样的困扰:完成大规模并行计算后,发现系统内存依然被并行池占…...
CSDN首页发布文章基于Min-Max-Max-Min四层优化架构的多能源系统日前-实时两阶段鲁棒调度模型,结合了Wasserstein分布鲁棒优化(DRO)和CVaR风险管理,用于求解含高比例
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
