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

news2024/9/21 14:48:47

目录

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.coloradmin.cn/o/1546251.html

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

相关文章

奇偶校验|ECC内存|海明码

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;本篇文章给大家介绍数据出错和有什么方法能减少出错。 单比特翻转 由于硬件故障或其他原因&#xff0c;内存或其他存储设备中的单个比特位发生随机变化的现象。 例如&#xff0c;原本存储为1的位可能变为0&#xff0c;或…

放弃 Rust 选择 Zig,Xata 团队推出 pgzx —— 计划使用 Zig 开发基于 PG 的分布式数据库

Summary Xata 公司在基于 PostgresSQL 开发自己的分布式数据库&#xff0c;出于 Zig 和 C 语言以及 PostgreSQL 的 API 有更好的互操作性的考虑&#xff0c;他们选择了 Zig 而非当红炸子鸡语言 Rust。他们的博客文章中对 pgzx 进行了介绍。让我们来看下他们对 Zig 和 Rust 语言…

创建多节点 k8s 集群

主机IP系统master192.168.2.15ubuntu20.04 x64 2C 4GWorker1192.168.2.16ubuntu20.04 x64 2C 4GWorker1192.168.2.18ubuntu20.04 x64 2C 4G 使用 iterm2 连接四台服务器 command shift i 同时操作 初始化配置 关闭防火墙 systemctl stop firewalld systemctl disable firewa…

Qt篇——Qt无法翻译tr()里面的字符串

最近遇到使用Qt语言家翻译功能时&#xff0c;ui界面中的中文都能够翻译成英文&#xff0c;但是tr("测试")这种动态设置给控件的中文&#xff0c;无法翻译&#xff08;lang_English.ts文件中的翻译已经正确添加了tr()字符串的翻译&#xff09;。 上网搜了很多资料&am…

Redis(十八)Redlock算法

文章目录 自研锁逻辑lock加锁关键逻辑 Redlock红锁算法自研锁存在的问题Redlock算法设计理念RedisonRedisson使用案例Redisson源码分析多机案例 自研锁逻辑 按照JUC里面java.util.concurrent.locks.Lock接规范编写 lock加锁关键逻辑 加锁的Lua脚本&#xff0c;通过redis里面的…

vue3+vite - 报错 import.meta.glob() can only accept string literals.(详细解决方案)

报错说明 在vue3+vite项目中,解决报错: [plugin:vite:import-analysis] import.meta.glob() can only accept string literals. 如果我们报错差不多,就可以完美搞定这个错误。 解决教程 这个错误,是因为

【笔记】MJ Prompt

参数 --chaos 10 or --c 10, 0-10, defalut 0 --quality 1 or --q, 0.25-1, defalut 1 --iw 2, 0.5-2, --stylize 100 or --s 100, 0-1000, defalut 100 --cref URL --cw 100, 0-100stylize 风格化&#xff0c;MJ不同的出图模式&#xff0c;有默认的艺术风格&#xff0c;该值…

TCP协议中的传输控制机制图文详解「重传机制」「流量控制」「拥塞控制」

目录 TCP重传机制 超时重传 快速重传 SACK 方法 Duplicate SACK TCP 流量控制 滑动窗口 累积确认 窗口大小由哪一方决定&#xff1f; 接收窗口和发送窗口的大小是相等的吗&#xff1f; 流量控制 窗口关闭的后果 糊涂窗口综合症 TCP拥塞处理 为什么要有拥塞控制呀&#xff0c;不…

LinkedIn账号为什么被封?被封后如何解决?

近期会有一些小伙伴说自己遇到了帐号无法登录的情况&#xff0c;其实出现领英帐号被封号(被限制登录)主要会有两类情况&#xff0c;今天就给大家分享一下如果被封该如何解决&#xff0c;强烈建议收藏。 在电脑领英官网或者手机领英APP上&#xff0c;输入领英帐号密码点击登录后…

力扣● 84.柱状图中最大的矩形

84.柱状图中最大的矩形 需要找到元素i的上一个更小的元素leftmin和下一个更小的元素rightmin&#xff0c;这样leftmin和rightmin之间的元素都比当前元素i更大&#xff0c;那么矩形的宽就是中间的这些元素&#xff1a;可以从leftmin1延伸到rightmin-1&#xff0c;长即为height[i…

rancher2.6部署

rancher2.6部署 1、准备环境镜像 2、部署3、密码获取密码设置新密码 4、设置语言5、导入已有集群 1、准备 环境 docker-ce-20.10.23-3.el8.x86_64.rpm以及依赖rpm kubernetes&#xff1a;v1.23.17 镜像 &#xff08;rancher和k8s有个版本对应关系&#xff0c;rancher2.5就不…

走进redisson

这里作者将大家走进redisson&#xff0c;读完这篇相信加深你对redisson的获取锁&#xff0c;重入&#xff0c;超时&#xff0c;看门狗&#xff0c;发布订阅等原理和功能的理解。 本文将深入原理代码&#xff0c;给出每行代码的意义以及最后的效果&#xff0c;过程有些枯燥&…

Python 指南-最短路径(Dijkstra 算法):

Dijkstra 算法可在 Python 库 OSMNX 中实现&#xff0c;可用于查找两个位置之间按距离或时间加权的最短路径。该算法使用 OpenStreetMap (OSM) 网络来驾驶、步行或骑自行车&#xff0c;并在后台使用 Python 库 NETWORKX 查找路线。 编码练习 正如我提到的&#xff0c;我将做一…

MySQL数据库 @@transaction_isolation参数的查询及修改

在应用开发过程中&#xff0c;可能会检查mysql数据库初始化参数符合要求。 遇到这种情况就要进行相应的调整。 1、查询参数信息 select transaction_isolation; 2、找到配置文件 &#xff0c;以window系统为例。 修改前先关闭MySQL数据库服务 对应需要修改的参数&#xff…

C语言看完我这篇最详细文件操作,你不会也得会!!!

1.使用文件 我们写的程序的数据是存储在电脑内存中&#xff0c;如果程序退出&#xff0c;内存就会被回收&#xff0c;数据就丢失&#xff0c;内存更具有一些实时性&#xff0c;等再次运行程序的数据的&#xff0c;数据就消失了&#xff0c;如果想要持久化的保存&#xff0c;可以…

LangChain-Chatchat

文章目录 关于 LangChain-Chatchat特性说明实现原理文档处理流程技术路线图&#xff08;截止0.2.10&#xff09; 使用 关于 LangChain-Chatchat Langchain-Chatchat&#xff08;原Langchain-ChatGLM&#xff09;基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答。 gith…

[自研开源] 数据集成之分批传输 v0.7

开源地址&#xff1a;gitee | github 详细介绍&#xff1a;MyData 基于 Web API 的数据集成平台 部署文档&#xff1a;用 Docker 部署 MyData 使用手册&#xff1a;MyData 使用手册 试用体验&#xff1a;https://demo.mydata.work 交流Q群&#xff1a;430089673 介绍 本篇基于…

STM32F4x7标准库移植LWIP

项目背景 使用GD芯片的我们&#xff0c;都会去参考ST的代码。可是呢&#xff0c;有一个很大的问题就是&#xff0c;ST早就提供HAL库了&#xff0c;而目前GD还只有标准库。在移植LWIP的时候&#xff0c;会有很多不便。 好在天无绝人之路&#xff0c;找到了一份ST的官方例程&am…

java常用IO流功能——字符流和缓冲流概述

前言&#xff1a; 整理下学习笔记&#xff0c;打好基础&#xff0c;daydayup! 之前说了下了IO流的概念&#xff0c;并整理了字节流&#xff0c;有需要的可以看这篇 java常用应用程序编程接口&#xff08;API&#xff09;——IO流概述及字节流的使用 字符流 FileReader(文件字…