【git分支管理策略】如何高效的管理好代码版本

目录

1.分支管理策略

2.我用的分支管理策略

3.一些常见问题


1.分支管理策略

分支管理策略就是一些经过实践后总结出来的可靠的分支管理的办法,让分支之间能科学合理、高效的进行协作,帮助我们在整个开发流程中合理的管理好代码版本。

目前有两套Git分支管理策略GitHub Flow和GitFlow,它们各自定义了一套规范,帮助开发者更好地组织和管理源代码的版本控制流程。

GitHub Flow

简介:

GitHub Flow 是由GitHub团队推广的一种简单、灵活且快速的工作流程,特别适合小型团队和持续交付环境。

核心概念:

  • 所有开发都是基于main分支(原称master,现在推荐使用main)。

  • 新的功能开发通过创建短期的特性分支(feature branches)。

  • 特性分支完成后,通过Pull Request (PR) 提交到main分支。

  • PR期间进行讨论、审查和自动化测试,只有当所有工作满足要求时,才将其合并至main。

优点:

GitHub Flow的优势是快速迭代,频繁部署,强调每个特性分支都应具备随时可部署的状态。

GitFlow

简介:

GitFlow 是一种更为严谨和复杂的分支模型,适用于大型项目和需要严格版本控制的企业级开发环境。

核心概念:

  • 分支分为两大类:持久分支和临时分支。

    • 持久分支包括:main(稳定版)、develop(开发版)。

    • 临时分支包括:feature(特性分支)、release(发布分支)、hotfix(热修复分支)。

  • develop分支作为日常开发集成的分支,每次新增功能或修复都在独立的feature分支上完成,完成后合并回develop。

  • 当产品即将发布时,创建一个release分支,进行测试和最后的调整,确认无误后合并到main和develop,并打上版本标签。

  • 如果生产环境中发现了紧急问题,那么在main基础上创建hotfix分支进行修复,修复完毕后同样合并回main和develop。

优势:

结构清晰,易于跟踪每个阶段的代码状态,有利于多人协同和大型项目管理,尤其对于那些有明确版本周期和稳定版需求的项目。 总结来说,GitHub Flow 更注重敏捷开发和快速迭代,简化了分支结构;而 GitFlow 则提供了详细的分支管理方案,更适合需要精细化版本管理和长周期开发的场景。目前市面上各团队常用的管理策略基本上都是基于GitHub Flow策略的。

2.我用的分支管理策略

目前作者所在的团队采用的分支管理策略就是基于GitHub Flow策略的。

我们有以下几个分支:

  • master,稳定主分支

  • pre-release,稳定测试分支

  • develop,开发分支

  • feature,单人新特性分支

  • release,发布分支

  • patch,维护分支

当我们开发新功能的时候会先分一下任务,然后各自从develop分支上拉一个属于自己的feature分支,这个feature一般会命名为:下个版本的版本号-feature-自己名字的缩写

任务有轻重缓急和难易之分,一个大版本的所有新需求很难在统一的一个时间点上完成,所以一般都是分批次提测的,最后合并在一起发版。提测的时候各自将自己要提测的内容从自己的feature上合并到develop分支上,再从develop分支合并到pre-release上。将pre-release部署到测试环境中用于测试。之所以这样做是在实践中发现很多时候develop并不是稳定的,大家都在往上面合并代码,直接将develop用于部署测试往往无法保证测试环境的稳定,会造成阻塞。所以有一个pre-release用来保证测试环境的稳定。测试期间的bug修复也是先修自己的feature然后合并到develop然后合并到pre-release。

要注意上面的合并一般指的都是cherry pick,一条一条的合并,分支级别的merge是很容易将pre-release和develop合乱的。

所有新特性都测试完成后,将develop合并到release上,然后基于release打tag发版。

发版后有可能还会发现一些bug,一般会基于发版的tag拉一个patch分支来进行快速修复。这时候修复的bug会先在patch上修复,修复完毕后合并到develop分支上。最后这个patch分支在维护一段时间后会被丢弃。

3.一些常见问题

1.如何打tag?

在IDEA种可以通过图形化的界面来打tag:

也可以通过命令来打tag:

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

打完tag之后push到远端仓库即可。

2.如何切到某个tag

打完tag之后有些时候我们要用到打tag的代码版本,可以通过命令跳过去:

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

3.如何基于tag拉分支?

打完tag代码就算是封板了,但是发版后仍然会有一些小问题会持续暴露出来,需要我们持续修复,于是我们需要基于tag拉出一个hotfix分支来,在这个分支上进行发版后的bug修复,可以通过命令来从某个tag拉出一个分支:

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

3.如何合并?

在hotfix上修复的bug在当前的开发分支上当然也是存在的,所以我们要将hotfix上的bug修复持续的合并到开发分支上,这时候尽量不要用分支级别的合并命令merge来操作,尽量将bugfix一条一条的合并到开发分支上。

在IDEA上可以直接通过图形化界面将某个分支上的修改单条的合并到当前分支。操作很简单,首先保证自己当前在接收合并的分支上,然后在git log中找到要合并过来的提交,cherry pick过来即可:

4.如何比对分支之间的区别?

从hotfix合并到develop分支,这种两个分支之间一条一条的合并难免会合并漏,最好的方式当然是要比对出两个分支之间的差异,在IDEA中很好比对差异:

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

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

相关文章

【线段树】第十三届蓝桥杯省赛C++ A组 Java C组 Python A组/B组《最长不下降子序列》(C++)

【题目描述】 给定一个长度为 N 的整数序列&#xff1a;,,⋅⋅⋅,。 现在你有一次机会&#xff0c;将其中连续的 K 个数修改成任意一个相同值。 请你计算如何修改可以使修改后的数列的最长不下降子序列最长&#xff0c;请输出这个最长的长度。 最长不下降子序列是指序列中的…

python每日分析练习:产品季度销售的比较分析

这次我们将关注一家零售公司的季度销售分析。 假设场景 一家零售公司希望分析其过去一年内各季度的销售表现&#xff0c;以便更好地理解其业务趋势&#xff0c;评估不同产品类别的表现&#xff0c;并优化未来的销售策略。 分析目的 理解季度销售趋势&#xff1a;分析公司整体…

Mac 装 虚拟机 vmware、centos7等

vmware&#xff1a; https://www.vmware.com/products/fusion.html centos7 清华镜像&#xff1a; 暂时没有官方的 m1 arm架构镜像 centos7 链接: https://pan.baidu.com/s/1oZw1cLyl6Uo3lAD2_FqfEw?pwdzjt4 提取码: zjt4 复制这段内容后打开百度网盘手机App&#xff0c;操…

C语言例4-7:格式字符f的使用例子

%f&#xff0c;实型&#xff0c;小数部分为6位 代码如下&#xff1a; //格式字符f的使用例子 #include<stdio.h> int main(void) {float f 123.456;double d1, d2;d11111111111111.111111111;d22222222222222.222222222;printf("%f,%12f,%12.2f,%-12.2f,%.2f\n&qu…

服务运营|香港大学雷骁:收益管理中价格歧视的公平性

编者按&#xff1a; INFORMS George B. Dantzig Dissertation Award 用于表彰运筹学和管理科学领域中具有创新性和实用性的最佳毕业设计。香港大学助理教授雷骁题为“Revenue Management in Video Games and With Fairness” 是这一奖项2023年度的提名者之一。 这篇毕业设计重…

github vscode 笔记

目录 前言1. 新建代码库2. 下载代码到本地3. 更新代码并上传到github 前言 github方便多人协作维护代码。该笔记记录了下面三个过程&#xff1a; 在github上新建代码库&#xff0c;下载代码到本地&#xff0c;将更新代码并上传到github 1. 新建代码库 2. 下载代码到本地 链…

中国赛道领跑之争:安踏将耐克越甩越远

一双鞋、一件衣服每被穿一次&#xff0c;消费者就会把它背后的品牌和自身的体验联系起来&#xff0c;做出评判。所以&#xff0c;如果说有什么领域能充分展示国产品牌的发展进步&#xff0c;鞋服一定包含在内&#xff0c;尤其是强调专业性的体育运动市场。 一年前的2023年3月&…

【Python版】手把手带你如何进行Mock测试

什么是mock&#xff1f; mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为&#xff0c;很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 为什么要使用Mock&#xff1f; 之所以使用mock测试&#xff0c;是因为真…

uniapp微信小程序_computed_计算BMI

一、computed的用法还有它是什么&#xff1f; 首先它叫计算属性&#xff0c;顾名思义他是用来计算属性&#xff0c;计算你在data模板上定义的属性&#xff08;其实在插值表达式也能直接计算但是首先太长了在{{}}里面写那么多不好看&#xff0c;还有其他特点我在下面一起说&…

paramiko,一个强大的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个强大的 Python 库 - paramiko。 Github地址&#xff1a;https://github.com/paramiko/paramiko 在网络编程中&#xff0c;远程操作是一项非常常见的需求&#xff0c;特别是…

[Java基础揉碎]抽象类

目录 通过问题引出 介绍 关键点 细节 ​编辑 抽象类的最佳设计模式--模版设计模式 1.先用最容易想到的方法 2.分析问题&#xff0c;提出使用模板设计模式 通过问题引出 假如我们有个动物类, 动物都有eat吃的方法, 但是具体吃什么, 我们不知道, 因为是什么动物我们不知道…

Camtasia Studio 2024:视频编辑与制作的新里程碑及需要下载吗

Camtasia Studio 2024&#xff1a;视频编辑与制作的新里程碑 在数字化时代&#xff0c;视频已经成为人们获取信息、娱乐和学习的主要方式之一。为了满足这一需求&#xff0c;视频编辑和制作软件也在不断发展和创新。Camtasia Studio 2024作为一款功能强大的视频编辑软件&#…

GIS+Python:地质灾害风险评价的智能化解决方案

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…

3-Flume之拦截器与GangLia监控

Flume Interceptor 概述 Interceptor(拦截器)本身是Source的子组件之一&#xff0c;可以对数据进行拦截、过滤、替换等操作不同于Selector&#xff0c;一个Source上可以配置多个Interceptor&#xff0c;构成拦截器链。需要注意的是&#xff0c;后一个拦截器不能和前一个拦截…

芒果YOLOv8改进130:Neck篇,即插即用,CCFM重构跨尺度特征融合模块,构建CCFM模块,助力小目标检测涨点

芒果专栏 基于 CCFM 的改进结构,改进源码教程 | 详情如下🥇 💡本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 即插即用 结构。博客 包括改进所需的 核心结构代码 文件 YOLOv8改进专栏完整目录链接:👉 芒果YOLOv8深度改进教程 | 🔥 订阅一个…

HarmonyOS 健康系统联系案例 创建项目

上文 HarmonyOS 健康系统联系案例 整体原型图介绍 我们 介绍了健康系统的整体 UI 然后 我们一点一点来 今天先搭个环境 首先 我们打开开发工具首页 创建项目 一个非常令人怀念的步骤啊 我们点击 Create Project 创建一个新的工程 模板 还是选最基础的 Empty Ability 然后 …

Docker系列

目录 练习&#xff1a;去DockerHub搜索并拉取一个Redis镜像 docker下载nacos 练习&#xff1a;去DockerHub搜索并拉取一个Redis镜像 目标&#xff1a; 1&#xff09;去DockerHub搜索Redis镜像 2&#xff09;查看Redis镜像的名称和版本 3&#xff09;利用docker pull命令…

Java异常知识点详解

目录 1. 异常的概念与体系结构 1.1 异常的概念 1. 算术异常 2. 数组越界异常 3. 空指针异常 1.2 异常的体系结构 1.3 异常的分类 2. 异常的处理 2.1 防御式编程 2.2 异常的抛出 2.3 异常声明throws 2.4 try-catch捕获并处理 2.5 finally 2.4 异常的处理流程 3. 自…

Linux基本指令解析二

Linux基本指令解析二 常见指令1.date指令2.find指令3.grep指令4.zip/unzip指令5.tar指令6.bc指令7.uname –r指令 重要的几个热键关机 常见指令 1.date指令 date 指定格式显示时间&#xff1a; date %Y:%m:%d date 用法&#xff1a;date [OPTION]... [FORMAT] 1.在显示方面…

【Docker】Docker安全与最佳实践:保护你的容器化应用程序

欢迎来到英杰社区&#xff1a; https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区&#xff1a; https://bbs.csdn.net/topics/617897397 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff…