当前位置: 首页 > news >正文

【Git流程最佳实践】 开发较大功能时应使用project branch

目录

  • 背景和失败经验
    • 名词定义
    • 曾经使用project branch犯的错
  • 建立project branch的必要性
  • 正确的使用project branch的方法

背景和失败经验

我们曾经使用过project branch,但是后来放弃了

名词定义

特性branch(特性分支): 在开发跨越新特性的时候会从主branch(master/trunk/develop)创建而来的一个git branch。经常会以 feature/<特性名> 命名
project branch(子项目分支): 在开发较大功能的时候会由几个程序员组成一个子项目小组。此时可以为这个子项目建立一个较大的开发branch。这个branch可以跨越sprint。改子项目开发人员的提交先提交到该project branch上,到一定时间点,把由project branch合并(merge)到主分支上。project branch可以以feature/<子项目名>-<创建日期>命名
conflict(代码冲突): 在branch代码merge到另外一个分支的时候,发生了该branch跟原branch修改了同一行代码的情况。git无法自动完成合并,需要开发人员手动解决。
revert(回滚): 取消最近的N个代码改动,恢复到某个之前的版本。

在写这个题目之前我曾经认为是理所应当的。但是自从我们的项目组在使用独立开发分支之后出现了一些问题后,我们开始考虑不使用独立分支。但是带来的问题更多,至此我才真的理解了独立开发分支的重要性。果然是最透彻的领悟还是得靠犯错获得。

曾经使用project branch犯的错

以下是我们放弃project branch的理由。但是这些理由其实是错误的使用了branch而造成的。所以我会写上当时觉得project branch不好的地方,并且写上真正的原因。

  • project branch让代码变得混乱,我们在不同的project branch上有不同版本的组件。真正的原因:过多的开发branch导致代码管理混乱,比如大量长期未同步的branch使得全局代码构成复杂

在这里插入图片描述

  • 每次合并project branch的时候出现了很多conflicts。解决起来很困难。有时候解决冲突的过程中甚至带来了新的bug,比如不小心删除了正确的代码。真正的原因:长时间未同步branch导致合并时冲突过多,增加解决冲突成本。而且正确的同步方向是从主分支同步到开发分支
    在这里插入图片描述

其实这些并不是project branch本身的问题。

建立project branch的必要性

以下是建立project branch的必要性以及正确使用方法。

  • 合并前检查conflict:可以通过pull request的方式在合并前预先查看是否存在冲突。
  • 评估测试流程:在合并前事先通知测试团队,并确保他们有足够的测试窗口。
  • 极大地减少revert难度:如果一个branch只包含了一个feature,将进一步减少涉及其他功能并存导致的强耦合问题。
  • 在project branch上执行自动化测试:使用持续集成工具在project branch上进行sanity测试,确保合并之前功能可靠性。
  • 公共的主branch的用户比你想象的多:其实使用主branch的人不只是某些engineers,别的engineers有可能也会用到。
    在这里插入图片描述

甚至测试人员和产品经理也会用到。
在这里插入图片描述

总结
使用project branchh可以最大化地减少发布风险,提升代码跟踪性和测试效率,实现更高效的团队合作。

正确的使用project branch的方法

  • 每日同步:保持每日从主branch同步代码,避免太大冲突

  • 保持年轻:该project branch不要保留太久(不能超过3个sprint

  • 压缩合并: 使用 squash & merge 来合并代码
    在这里插入图片描述

  • 保持干净:合并完后删除project branch,防止后续代码提交

相关文章:

  • 什么是模型上下文协议 (MCP)?与 API 相比,它如何简化 AI 集成?
  • Meta Platforms Inc.(原Facebook)2024-2025 年最新发展深度分析报告
  • 第2.2节 Android Jacoco插件覆盖率采集
  • 用 pytorch 从零开始创建大语言模型(零):汇总
  • 轻松迁移 Elasticsearch 数据:如何将自建索引导出并导入到另一个实例
  • 通过 Executors 创建线程池
  • Java基础编程练习第35题-可实现多种排序的Book类(PTA练习题)
  • 第十六届蓝桥杯模拟二
  • PowerBI 条形图,解决数据标签在条形内部看不清的问题
  • DeepSeek R1 本地部署指南 (2) - macOS 本地部署
  • 初级:控制流程面试题精讲
  • LabVIEW液压传动系统教学仿真平台
  • 2025_0321_生活记录
  • 【蓝桥杯速成】| 9.回溯升级
  • SvelteKit 最新中文文档教程(8)—— 部署 Node 服务端
  • STM32——基本定时器
  • PHP PSR(PHP Standards Recommendations)介绍
  • Vue 3 + TypeScript 实现视频播放与字幕功能:集成西瓜播放器 XGPlayer
  • vscode + latex workshop + sumatraPDF
  • 破局 MySQL 死锁:深入理解锁机制与高效解决方案
  • 跨文化戏剧的拓荒者与传承者——洪深与复旦剧社的百年回响
  • 加拿大总理宣布新内阁名单
  • 北京今日白天超30℃晚间下冰雹,市民称“没见过这么大颗的”
  • “11+2”复式票,宝山购彩者领走大乐透1170万头奖
  • 通化市委书记孙简升任吉林省副省长
  • 民生谣言误导认知,多方联动守护清朗——中国互联网联合辟谣平台2025年4月辟谣榜综述