你是否经历过这种场景:临到发版,一堆功能代码挤在一起,测试分不清范围,修复一个Bug可能引发三个新Bug?发布过程像一场豪赌?

问题的核心往往在于分支策略和流程的混乱。今天,我们就来建立一套在绝大多数场景下都简单、清晰、高效的代码管理标准。

一、核心目标:我们要解决什么?
  1. 主线稳定:确保主分支的代码随时可以发布到生产环境。

  2. 并行开发:让多个功能开发互不干扰。

  3. 发布清晰:清楚地知道这次发布包含了什么,出了问题能快速定位和回滚。

  4. 简化流程:规则越简单,越容易执行,越不容易出错。

二、极简分支策略:两条主线 + 功能分支

忘掉那些复杂的分支模型。对于90%的项目,你只需要两种长期存在的主分支和一种临时分支:

分支类型谁用?作用禁忌
主分支 (Main/Master)所有人神圣不可侵犯。它始终与生产环境运行的代码完全一致。严禁直接推送代码。唯一来源是合并请求。
开发分支 (Develop)开发者新功能集成的大本营。这里的代码是下一个版本的预览。不要从这里直接发版。
功能分支 (Feature)单个开发者从 develop 拉取,用于开发一个新功能或修复。生命周期要短,完成必须合并删除。

怎么操作?

  • 所有新功能开发,都必须从最新的 develop 分支切出一个新的功能分支

  • 分支命名要有意义,例如:feature/user-payment 或 fix/login-issue

三、核心流程:如何执行?

整个流程的核心是 “切新分支开发” 和 “合并请求(Pull Request)”

1. 开发新功能流程

记住:一个功能,一个分支,一个合并请求。

  1. 准备:基于最新的 develop 分支,切出新分支 git checkout -b feature/awesome-new-thing develop

  2. 编码:在你的功能分支上专心工作,频繁提交。

  3. 提审:完成后,发起一个到 develop 分支的合并请求(Pull Request)

  4. 审查

    • 必须有同事审查你的代码。

    • 必须有自动化工具(CI)检查你的代码:能否成功编译?单元测试是否都通过?代码风格是否符合规范?

    • CI检查不通过,绝对禁止合并!

  5. 集成:审查通过,CI全绿,才能将功能分支合并回 develop

  6. 清理:合并成功后,立即删除这个功能分支。保持仓库整洁。

2. 发布版本流程(这是关键!)

当 develop 分支集成了足够的功能,准备发布一个新版本时:

  1. 启动发布:从 develop 分支切出一个发布分支,以版本号命名,例如 release/v1.2.0

    • 问:为什么不用develop直接发?答:为了隔离。发布前的最终测试和修复可能会产生新的提交,我们不想影响正在开发下一个版本的人。

  2. 测试与修复:QA团队只测试这个 release/v1.2.0 分支。发现的所有Bug,都在这个发布分支上修复

  3. 发布上线

    • 测试通过后,将 release 分支合并到 main 分支。

    • 至关重要的一步:在 main 分支上打一个标签(Tag),标签名就是版本号 v1.2.0。这个Tag就是你发布和回滚的精确坐标。

    • 将 release 分支也合并回 develop 分支,确保修复的Bug在后续开发中也不会再现。

  4. 部署:将打上Tag的 main 分支代码部署到生产环境。

  5. 清理:删除发布分支 release/v1.2.0

3. 修复线上紧急Bug

线上出现紧急Bug,需要立刻修复怎么办?

  1. 基于主分支修复:从 main 分支的最新Tag(比如 v1.2.0)切出一个热修复分支,例如 hotfix/critical-payment-bug

  2. 快速修复:在这个分支上以最快速度修复问题并测试。

  3. 紧急发布

    • 将修复好的 hotfix 分支合并到 main,并打上新Tag v1.2.1

    • 同样至关重要:将 hotfix 分支也合并回 develop,确保修复不会丢失。

  4. 部署:部署新Tag v1.2.1 到生产环境。

  5. 清理:删除热修复分支。

四、如何坚决避免发版混乱?—— 三大纪律
  1. 主分支保护原则main 分支是“王冠”,必须设置成保护分支。任何代码只能通过合并请求进来,且合并请求必须通过CI检查和至少一个同事的审查。封死直接推送的后门

  2. 功能原子化原则:一个合并请求只做一件事(一个功能或一个修复)。坚决反对把多个不相关的修改放在一个分支里提交。这样代码审查范围清晰,回滚风险低。

  3. 标签化发布原则永远只部署打了Tag的代码。Tag就是你的快照。出了问题,一分钟就能回滚到上一个Tag的版本。严禁直接部署某个分支的最新代码。

总结

这套规范的核心就是:

  • 开发在 功能分支 → 集成到 develop

  • 发布时用 发布分支 隔离测试 → 稳定的代码合并到 main 并打Tag

  • 修复从 main 的Tag切 热修复分支 → 修复后合并回 maindevelop

规则简单,关键在于严格执行。尤其是保护主分支打Tag这两个动作,是避免混乱的生命线。

操作目的常用 Git 命令
拉取最新代码git pull origin <branch_name>
创建/切换分支git checkout -b <new_branch_name>
提交更改git add . git commit -m "message"
推送分支git push -u origin <branch_name> (首次) git push (后续)
合并分支git merge <source_branch>
打版本标签git tag -a <tag_name> -m "message"
推送标签git push origin <tag_name>
删除本地分支git branch -d <branch_name>
删除远程分支git push origin --delete <branch_name>

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

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

相关文章

【golang长途旅行第30站】channel管道------解决线程竞争的好手

channel 为什么需要channel 使用全局变量加锁同步来解决goroutine的竞争&#xff0c;可以但不完美难以精确控制等待时间​&#xff08;主线程无法准确知道所有 goroutine 何时完成&#xff09;。全局变量容易引发竞态条件​&#xff08;即使加锁&#xff0c;代码复杂度也会增加…

苹果XR芯片介绍

苹果的 XR 芯片技术主要体现在 A 系列、M 系列处理器以及专为空间计算设计的 R1 协处理器中。以下从技术架构、产品迭代和综合对比三个维度展开分析&#xff1a;一、技术架构解析1. A 系列芯片&#xff08;以 A12 Bionic 为例&#xff09;制程工艺&#xff1a;7nm&#xff08;台…

达梦数据库巡检常用SQL(三)

达梦数据库巡检常用SQL(三) 数据库SQL运行检查 数据库SQL运行检查 死锁的事务情况: SELECT TO_CHAR(HAPPEN_TIME,YYYY-MM-DD HH24:MI:SS) HAPPEN_TIME,SQL_TEXT FROM V$DEADLOCK_HISTORY WHERE HAPPEN_TIME >DATEADD(DAY,-30,

基于SpringBoot的校园周边美食探索及分享平台

1. 项目简介 项目名称&#xff1a;校园周边美食探索及分享平台 项目背景&#xff1a;针对校园师生对周边美食信息的需求&#xff0c;构建一个集美食推荐、鉴赏、评论互动及社交功能于一体的平台&#xff0c;帮助用户发现优质美食资源并进行分享交流。 主要目标&#xff1a; 提供…

Go数据结构与算法-常见的排序算法

虽然看过别人写了很多遍&#xff0c;而且自己也写过很多遍&#xff08;指的是笔记&#xff09;&#xff0c;但是还是要写的就是排序算法。毕竟是初学Go语言&#xff0c;虽然之前写过&#xff0c;但是还是打算再写一遍。主要包括插入排序、选择排序、冒泡排序、快速排序、堆排序…

第 6 篇:目标规则与负载均衡 - `DestinationRule` 详解

系列文章:《Istio 服务网格详解》 第 6 篇:目标规则与负载均衡 - DestinationRule 详解 本篇焦点: 深入理解 DestinationRule 的核心作用:定义流量在到达目的地之后的行为。 详细剖析其三大核心功能:服务子集 (Subsets), 流量策略 (Traffic Policy), TLS 设置。 动手实战…

一个简洁的 C++ 日志模块实现

一个简洁的 C 日志模块实现 1. 引言 日志功能在软件开发中扮演着至关重要的角色&#xff0c;它帮助开发者追踪程序执行过程、诊断问题以及监控系统运行状态。本文介绍一个使用 C 实现的轻量级日志模块&#xff0c;该模块支持多日志级别、线程安全&#xff0c;并提供了简洁易用…

C语言---数据类型

文章目录数据类型分类1. 基本类型 (Basic Types)a. 整数类型 (Integer Types)char (字符型)int (整型)short (短整型)long (长整型)long long (C99标准引入)图片汇总b. 浮点类型 (Floating-Point Types)float (单精度浮点型)double (双精度浮点型)long double (长双精度浮点型)…

本搭建乌云漏洞库

1.下载镜像站文件&#xff0c;并拖入虚拟机 2.将bugs.rar解压至网站根目录下 /var/www/html 3.配置bugs/conn.php 4.在bugs下创建upload目录&#xff0c;将10-14、15-a、15-b、16压缩包文件解压到该upload目录 5.把wooyun.rar解压到 /mysql/data/wooyun目录下 6.配置hosts文件后…

Vmware虚拟机 处理器配置选项配置介绍

1. 处理器配置选项好&#x1f44c;&#xff0c;我来帮你逐一解读 VMware 里 虚拟机处理器 这些选项的含义。 你截的图里&#xff0c;主要有三块内容&#xff1a; 处理器数量 每个处理器的内核数量 ©虚拟化引擎1️⃣ 处理器数量 这是分配给虚拟机的 逻辑 CPU 插槽数。一般…

day40-tomcat

1.每日复盘与今日内容1.1复盘keepalived高可用配置抢占式与非抢占式脑裂keepalived处理Nginx挂掉1.2今日内容部署、安装、配置tomcat(systemctl)Tomcat主配置文件部署静态页部署zrlog&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;&#x1f35f;接入负载均衡挂载到NFS2…

【RA-Eco-RA4E2-64PIN-V1.0 开发板】步进电机的串口控制

【RA-Eco-RA4E2-64PIN-V1.0 开发板】步进电机的串口控制 本文介绍了 RA-Eco-RA4E2-64PIN-V1.0 开发板通过串口指令实现 28BYJ-48 步进电机旋转角度和速度的精确控制的项目设计。 项目介绍 硬件连接&#xff1a;28BYJ-48 步进电机、ULN2003 驱动板、Jlink 调试器、供电电源等&am…

PiscCode基于 Mediapipe 的人体多模态关键点检测与可视化系统 —— HumanMultiLandmarker 深度解析

一、引言 在计算机视觉领域&#xff0c;人体关键点检测&#xff08;Human Pose Estimation&#xff0c;HPE&#xff09;一直是研究和应用的热点方向之一。随着深度学习与实时图像处理技术的发展&#xff0c;人体姿势估计已经从传统的 2D 检测走向了 3D 空间建模&#xff0c;并…

文献阅读笔记【物理信息机器学习】:Physics-informed machine learning

文献阅读笔记&#xff1a;Physics-informed machine learningSummaryResearch ObjectiveBackground / Problem Statement问题背景研究现状需解决的问题问题出现的原因分析问题解决思路Method(s)问题建模作者解决问题的方法/算法1. 观测偏差&#xff08;Observational Biases&am…

Linux服务环境搭建指南

实验拓扑概述**实验拓扑&#xff1a; APPSRV&#xff1a; 主机名&#xff1a;appsrv.example.com ip地址&#xff1a;192.168.100.10 网关&#xff1a;192.168.100.254 网卡为NAT模式 STORAGESRV&#xff1a; 主机名&#xff1a;storagesrv.example.com ip地址&#xff1a;192.…

[特殊字符] 数据库知识点总结(SQL Server 方向)

一、数据库基础概念数据库&#xff08;Database&#xff09;&#xff1a;存储和管理数据的容器。数据表&#xff08;Table&#xff09;&#xff1a;以行和列形式组织数据。行&#xff08;Row&#xff09;&#xff1a;一条记录。列&#xff08;Column&#xff09;&#xff1a;字…

【PSINS工具箱】MATLAB例程,二维平面上的组合导航,EKF融合速度、位置和IMU数据,4维观测量

文章目录关于工具箱程序简介代码概述核心功能与步骤运行结果MATLAB代码关于工具箱 本文所述的代码需要基于PSINS工具箱&#xff0c;工具箱的讲解&#xff1a; PSINS初学指导&#xff1a;https://blog.csdn.net/callmeup/article/details/137087932 本文为二维平面上的定位&am…

MiMo-VL 技术报告

摘要 我们开源了 MiMo-VL-7B-SFT 和 MiMo-VL-7B-RL 两个强大的视觉语言模型,它们在通用视觉理解和多模态推理方面均展现出最先进的性能。MiMo-VL-7B-RL 在 40 项评估任务中的 35 项上优于 Qwen2.5-VL-7B,并在 OlympiadBench 上获得 59.4 分,超越了参数量高达 780 亿的模型。…

CTFshow Pwn入门 - pwn 19

先看main函数&#xff1a;fclose(_bss_start) fclose(stdout) 关闭了默认fd1的输出&#xff0c;所以system的结果无法直接看到。 思路&#xff1a; 输出重定向。 ls 1>&0 ls >&0 ls >&2 ###三种写法均可将输出重定向到能回显的终端并获得一个新的交互…

Redis(以Django为例,含具体操作步骤)

简介Redis&#xff08;Remote Dictionary Server&#xff09;是一个开源的内存数据结构存储系统&#xff0c;支持多种数据结构&#xff08;如字符串、哈希、列表、集合、有序集合等&#xff09;&#xff0c;可用作数据库、缓存或消息队列。其核心特点包括&#xff1a;高性能&am…