使用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.hqwc.cn/news/174826.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL使用

--天空会的像哭过,离开你以后 并没有更自由 SQL进行数据的删除 一、删除delete 语法 delete [from] 表名称 where 条件数据删除,不能删除某一列,因为删除是对记录而言 2.1 删除是一条一条删除,每次删除都会将操作写入日志文件 删…

JPA Buddy快速创建update、find、count、delete、exists方法

JPA Buddy快速创建update、find、count、delete、exists方法,JPA默认提供的CrudRepository\JpaRepository提供的方法比较少,一般我们会手写一些方法,这里我们选择通过JPA Buddy快速生成,之前文章中讲到了JPA Buddy原本是IDEA收费插…

Word软件手动安装Zotero插件

文章目录 Word软件手动安装Zotero插件方法一方法二 参考资料 Word软件手动安装Zotero插件 方法一 关闭word在zotero中依次点击编辑—首选项—引用—文字编辑软件—重新安装加载项Microsoft word 方法二 寻找Zotero.dotm存储位置, 例如D:\Program Files\Zotero\ext…

kernelbase.dll故障怎么处理?Kernelbase.dll故障的解决方法

在使用Windows操作系统过程中,有可能出现kernelbase.dll故障的情况。本文将详细介绍几种修复kernelbase.dll文件的方法,并对这个重要的dll文件进行简要的介绍。 一.kernelbase.dll文件概述 Kernelbase.dll是Windows系统中的一个关键动态链接库&#xff…

阿里云优惠券介绍、作用、领取入口及使用教程

阿里云是阿里巴巴集团倾力打造的云计算品牌,提供丰富多样的云计算产品及服务,为了吸引用户,阿里云经常推出各种优惠活动,其中就包括阿里云优惠券的发放。本文将为大家详细介绍阿里云优惠券的作用、领取入口以及使用教程。 一、阿里…

leetcode:21. 合并两个有序链表

一、题目 函数原型: struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) 二、思路 合并两个有序链表为一个新的升序链表,只需要遍历两个有序链表并比较结点值大小,依次将较小的结点尾插到新链表即可。 三、代码…

arcgis基础篇--实验

一、绘制带空洞的面要素 方法一:先绘制出一个面区域,然后在面上再绘制一个面区域代表面洞,两者位于同一个图层内,选中代表面洞的区域,选择【编辑器】-【裁剪】工具,将面裁剪出一个洞,随后删除代…

零代码秒集成打通小鹅通订单支付信息与 CRM合同接口

随着科技的不断进步,数字化已经成为了商业世界的核心。企业和组织必须紧跟数字化趋势,以适应快速变化的市场需求和消费者行为。企业需要做到快速反应市场的需求变化,从产品设计到产品生产,每一步都离不开技术人员对系统的操作&…

现货黄金职业交易员怎么使用技术分析?

职业的交易员每天要处理很多不同的信息,其中只一部分是涉及技术指标。在这一部分处理技术分析的时间里,只能再分出少之又少的时间给技术指标。那职业交易员会利用做技术指标做什么呢?下面我们就来讨论一下。 识别行情。技术指标的主要作用就是…

docker stop slow 解决

验证 NanoMQ stop slow 的问题 daemon 和非 daemon 两种方式 docker stop 都很慢 疑问是默认情况下,SIGTERM 会被处理。 模拟 docker 内发送 SIGTERM 信号 # The default signal for kill is TERM # pkill will send the specified signal (by defau…

VRRP(虚拟路由器冗余协议)标准协议工作机制与优势介绍

VRRP标准协议 文章目录 VRRP标准协议简介VRRP标准协议基本概念VRRP标准协议工作机制主备选举主备倒换非抢占模式抢占模式 VRRP标准协议技术优势VRRP典型组网单备份组主备备份多备份组负载分担 推荐阅读 VRRP标准协议简介 VRRP(Virtual Router Redundancy Protocol…

(只需三步)Vmvare tools安装教程,实现与windows互通复制粘贴与文件拖拽

首先确保Ubuntu是联网的,如果连不上网可以参考我的这个联网教程,也很简单 (只需三步)虚拟机上vm的ubuntu不能联上网怎么办-CSDN博客 第一步:卸载之前的tools,确保没有残留 sudo apt-get autoremove open-vm-tools 第…