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

Git分支和迭代流程

Git分支

feature分支:功能分支

dev分支:开发分支

test分支:测试分支

master分支:生产环境分支

hotfix分支:bug修复分支。从master拉取,修复并测试完成merge回master和dev。

某些团队可能还会有 realese分支:预发布分支。

release 为预上线分支,提测阶段,会以release分支代码为基准提测,用于QA测试。release分支内容可以从feature分支合并,测试完成merge回master。

一、Git版本迭代

1.版本开始:从远程master分支拉出新的远程feature分支

2.本地开发:本地checkout到feature分支

3.提交代码:本地feature推送到远程feature分支

4.开发自测:feature分支,合并到远程dev分支。

5.测试环节:开发自测完毕后,开发提测,进入测试环节。把远程feature分支,合并到远程test分支。。

6.测试完毕,远程feature分支,合并到master。发版。

feature分支,合并到远程dev分支

  • 本地先切到dev分支。

  • 然后将远程的feature分支合并到本地dev分支

  • 再将本地dev分支推送到远程的dev分支。

  • 切回本地的feature分支。

处理合并冲突

如果A同学在featureA分支,B同学在featureB分支,分别修改相同的内容,那么在合并到dev分支时,就会有冲突。这时需要处理合并冲突:

  • 如果发现代码有冲突,可以尝试将master的代码合并到自己的feature,再合并到dev分支。

因为feature分支是从master分支拉出来的,如果还有新的feature分支提交到master,那么自己的feature分支代码就是滞后的。

  • 如果还是有冲突,自己修改的就自己合并,如果不是自己写的代码,那可以找修改代码的同学进行合并。

可以选择左边的远程分支上的代码,也可以选择右边的代码,而中间是合并的结果。

cherry pick 摘取其他分支的comment

如果想把 feature_v1.0 分支的comment 摘到 feature_v1.0_new 分支上,
需要先切换到 feature_v1.0_new分支,然后点击 下面菜单栏的 git,点击Local Changes旁边的 Log,这时能看到 local和remote的分支,点击feature_v1.0分支。
从feature_v1.0,选中自己需要的comment,点击cherry pick,就能摘到 feature_v1.0_new。

check pick结果如下:

三、注意点:

  • 代码已经提交到master分支并发布,那么就不要再修改对应的feature分支。保留现场。

  • dev分支、test分支的代码,不要合并到feature分支。

因为dev分支、test分支可能是包含多个feature的,一旦feature分支被污染,包含了其他feature的内容,

那么feature分支合并到master的代码,就可能包含未测试的代码。这会导致生产问题。

dev分支不小心合并到feature分支,怎么处理?

  • Idea(或者其他开发工具)新建一个文件夹,从Git重新clone,不然可能会读到本地缓存。(开发工具没有本地缓存就不需要做这一步)

  • 从master重新拉feature-new分支在本地切换到这个新的feature-new分支。

  • 从Git提交记录中,选择旧的远程feature分支,选中自己需要的内容,做cherry-pick,提交人选择自己,被污染的部分不要cherry-pick。
    从最旧的记录一直cherry-pick,直到最新的记录。

  • 备份旧的feature分支 feature-backup,并删除掉旧的feature分支。
    从feature-new分支,拉取出新的feature分支。分支没有污染了。

release分支有什么用?

如果发版时,要发布的服务和功能非常多,如果直接合并到 master 分支,验证不通过的话,回滚会非常麻烦。因此,先从 feature 分支合并到 release 分支,在验证通过后,才将 release 分支合并到 master 分支,会更加稳妥一些。

参考资料

https://www.cnblogs.com/peace-ful/p/15407168.html
注:本文介绍的只是git流程的一种,能够适应多版本并行。也可以使用标准的 git flow流程,详情见:
https://blog.csdn.net/sunyctf/article/details/130587970

相关文章:

  • Xubuntu16.04系统中修改系统语言和系统时间
  • 代码随想录算法训练营day14||二叉树part01、理论基础、递归遍历、迭代遍历、统一迭代
  • 嵌入式Qt 第一个Qt项目
  • Android矩阵Matrix动画缩放Bitmap移动手指触点到ImageView中心位置,Kotlin
  • 17 ABCD数码管显示与动态扫描原理
  • 【AI】安装ubuntu20.04教程(未完待续)
  • WPF是不是垂垂老矣啦?平替它的框架还有哪些
  • Google刚刚推出了图神经网络Tensorflow-GNN
  • 视频讲解:优化柱状图
  • BUGKU-WEB GET
  • Golang中的fmt包:格式化输入输出的利器
  • Chrome 沙箱逃逸 -- Plaid CTF 2020 mojo
  • Android 移动应用开发 创建第一个Android项目
  • mysql、mybatis中SORT
  • Vue3.0(七):Pinia状态管理
  • [case10]使用RSQL实现端到端的动态查询
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Android Volley源码解析
  • SegmentFault 2015 Top Rank
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue全家桶实现一个Web App
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 关于List、List?、ListObject的区别
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 优化 Vue 项目编译文件大小
  • 主流的CSS水平和垂直居中技术大全
  • - 转 Ext2.0 form使用实例
  • ​油烟净化器电源安全,保障健康餐饮生活
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • $refs 、$nextTic、动态组件、name的使用
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)WCF的Binding模型
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • .cfg\.dat\.mak(持续补充)
  • .Net 4.0并行库实用性演练
  • .NET 8.0 发布到 IIS
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .net网站发布-允许更新此预编译站点
  • /dev/sda2 is mounted; will not make a filesystem here!
  • /proc/vmstat 详解
  • @RequestMapping用法详解
  • [16/N]论得趣
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [BIZ] - 1.金融交易系统特点
  • [BZOJ 3680]吊打XXX(模拟退火)
  • [bzoj1324]Exca王者之剑_最小割
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [ES-5.6.12] x-pack ssl