使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/143274.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

适配器模式 ( Adapter Pattern )(6)

适配器模式 ( Adapter Pattern ) 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁 适配器模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能 举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器…

应用亚马逊云科技,Share Creators1个月内上线生成式AI生图模块

随着生成式AI在全球范围爆火,如何充分利用生成式AI自动生成内容提高创作效率已成为设计领域创新的关键突破口。对于设计行业和游戏行业的众多企业和团队而言,管理数字资产的能力是其实现高效创作最大的挑战之一,也是在降本增效的流程中非常容…

自己搭设开源密码管理工具 bitwarden

简介 Bitwarden是一款自由且开源的密码管理服务,用户可在加密的保管库中存储敏感信息(例如网站登录凭据)。Bitwarden平台提供有多种客户端应用程序,包括网页用户界面、桌面应用,浏览器扩展、移动应用以及命令行界面。[…

【Linux网络】1分钟使用shell脚本完成DNS主从解析服务器部署(适用于centos主机)

DNS正向解析主从解析服务器脚本 1、脚本内容 主服务器脚本 #!/bin/bash ##先修改本地DNS缓存服务器 read -p "请输入主服务器ip地址:" masterIP sed -i /DNS/d /etc/sysconfig/network-scripts/ifcfg-ens33 echo "DNS$masterIP" >> /e…

干洗店管理系统洗鞋店小程序开发搭建;

干洗店管理软件,实现从门店收衣到工厂洗涤,全程数字化监控,操作简单易用。客户在线下单,商家通过物流App完成上门取件,提升用户体验的同时,提高运营效率。 洗衣软件打造专属于每个商户的小程序,…

MySQL-事务

什么是事务 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 事务的特性 (ACID) 原子性(Atomicity):事务是不…

稳定扩散与潜伏扩散:哪个更好?

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D数字孪生场景编辑器 本文对这两种类型的扩散、它们的工作原理、差异和未来影响进行了详细讨论。 了解稳定扩散 通过稳定扩散生成的图像 Stable Diffu…

RabbitMQ 核心部分之简单模式和工作模式

文章目录 一、Hello World(简单)模式1.导入依赖2.消息生产者3.消息消费者 二、Work Queues(工作)模式1.抽取工具类2.启动两个工作线程3.启动一个发送线程4.结果 总结 一、Hello World(简单)模式 在下图中&…

内衣洗衣机和手洗哪个干净?好用的内衣洗衣机推荐

在日常生活中,我们的衣服不可避免地会沾染上各种细菌、毛发和污渍,将它们与贴身衣物混合清洗,很容易发生交叉感染,而被感染后,贴身衣物也有可能导致我们人体引起皮肤病。这也是为什么大部分人都喜欢用手洗的原因&#…

SA实战 ·《SpringCloud Alibaba实战》第13章-服务网关:项目整合SpringCloud Gateway网关

大家好,我是冰河~~ 一不小心[SpringCloud Alibaba实战》专栏都更新到第13章了,再不上车就跟不上了,小伙伴们快跟上啊! 在《SpringCloud Alibaba实战》专栏前面的文章中,我们实现了用户微服务、商品微服务和订单微服务之间的远程调用,并且实现了服务调用的负载均衡。也基于…

MBTI职业性格测试,用于职业选择是否靠谱

关于性格测试的看法 所有人都会说我了解自己的性格!但真的了解吗?性格有外在表现,也有内因的驱动,我们通常感受到的是性格的外在表现.... 性格测试,是针对有想法要改变自己和提高自己的人,如果你一个懒字…

cubemx为啥在SPI配置时将MISO设置为AFPP,而不是输入模式

一般来说在配置SPI的时候,SCK、MOSI、NSS:通常配置为推挽输出模式,在单主机模式下,可以将NSS引脚配置为GPIO输出,MISO通常需要配置为浮空输入或上拉输入模式,但是cubemx却其配置成推挽输出模式,…

多模态及图像安全的探索与思考

前言 第六届中国模式识别与计算机视觉大会(The 6th Chinese Conference on Pattern Recognition and Computer Vision, PRCV 2023)已于近期在厦门成功举办。通过参加本次会议,使我有机会接触到许多来自国内外的模式识别和计算机视觉领域的研究…

janus 安装部署

本文使用docker进行安装,还没有安装docker和docker-compose的,请自行安装,这里就不介绍了 环境 janus-gateway镜像版本:anyan/janus-gateway:0.10.7 linux版本: Ubuntu 18.04.6 LTS coturn/coturn 镜像版本: coturn/coturn:latest 镜像ID 8…

觉非科技发布【轻地图高速NOA智驾方案】|地平线,觉非科技,MobileDrive超捷生态协作实现技术落地

11月10日,2023世界新汽车技术合作生态展期间,觉非科技正式发布了基于地平线征程系列以及MobileDrive超捷规控系统的【轻地图高速NOA智驾解决方案】。该方案首次实现了从芯片能力输出、到数据闭环建设、再到规控部署的产业生态链协作与打通,为…

员工电脑监控的方法有哪些

有人在后台问,员工电脑监控的方法有哪些? 其实主要包括以下几方面:1)安装监控软件 2)使用操作系统自带的工具 3)部署网络监控设备 4)定期检查电脑 5)制定严格的规章制度 因为内容比…

23款奔驰C260L升级原厂360全景影像 超广角的视野

本次星骏汇小许介绍的是23款奔驰C260L升级原厂360全景影像,上帝视角看清车辆周围环境,更轻松驾驶 升级360全景影像系统共有前后左右4个摄像头,分别在车头,车尾,以及两边反光镜下各一个,分别用来采集车头&am…

在ant构建脚本中调用maven的命令

有时候想用maven管理依赖,用ant构建。 在ant的build.xml文件中可以使用exec这个task来调用系统命令,也就可以调用maven的命令。 例如,执行maven的命令mvn dependency:copy-dependencies,可以将项目的依赖提取出来,放…

【ARL灯塔搭建详细教程】

文章目录 前言一、前期准备二、安装docker及docker-compose三、安装ARL灯塔四、登录ARL灯塔 前言 ARL(Asset Reconnaissance Lighthouse)资产侦查灯塔旨在快速发现并整理企业外网资产并为资产构建基础数据库,无需登录凭证或特殊访问即可主动…

低代码平台加持后紧急交付项目如何突破极限

导读: 传统开发低代码开发,两种开发模式的深度融合,基于已有的业务沉淀,快速实现项目中大量的定制需求,高速、高能使得传统项目最为宝贵的工期变得充裕。 项目管理的十大知识域中,其实并没有专门的时间&…