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

Git企业开发--分支管理

文章目录

  • Git企业开发
    • 理解分支
    • 创建切换合并删除分支
    • 合并冲突
    • 合并模式
    • 分支策略
    • bug分支
    • 强制删除分支

很高兴和大家见面,给生活加点impetus!!开启今天的编程之路
在这里插入图片描述
作者:٩( ‘ω’ )و260
我的专栏:Linux,C++进阶,C++初阶,数据结构初阶,题海探骊,c语言
欢迎点赞,关注!!

Git企业开发

理解分支

假设情景,此刻你在学习c++,在另一个平行时空中,另一个你在学习Java,两个互不干扰,当c++和Java都学习完之后,两个你进行合并,就能够花费更少的时间,学习到更多的技术。
对应到git来说,版本库中的HEAD指针指向master分支。master指向master分支中的最新的commitID。
在这里插入图片描述
通过.git中的结构,我们能够发现,每一次的提交记录都对应有上一次提交的commitID。所以可以将每次提交记录理解为线性的。
在这里插入图片描述
我们可以在master主分支再来开分支,这就涉及分支的创建,切换,合并操作。

创建切换合并删除分支

背景知识。
查看分支状态:git branch
在这里插入图片描述
现在只有一个master分支,那么前面的*号是什么意思呢?
HEAD指针并不是只能指向master分支,HEAD可以指向任何分支,当某个分支被HEAD指向时,该分支就是工作分支(add,commit的commitID在该分支上了)。

创建分支:git branch 分支名
在这里插入图片描述
当我们创建分支后,并打印master主分支和新分支的内容,发现两者的commitID相同。为什么呢?因为在当前的commitID的git版本下创建新的分支,那么该分支肯定和当前git版本是相同的,所以commitID相同。
在这里插入图片描述

切换分支:git checkout 分支名(注意不要带–,否则就是撤销修改的操作了)
在这里插入图片描述
此时HEAD指针肯定已经指向dev1了,当然,dev1肯定和master一样,都是指向对应分支的最新commitID。
在这里插入图片描述

创建 + 切换分支一步完成:git checkout -b 分支名(不存在的分支名)
在这里插入图片描述

合并分支:git merge 分支名
在这里插入图片描述
需要注意的是,如果想要将分支a合并到master分支,应该先切换到master分支,反之。
在这里插入图片描述
合并之后我们能够发现master指针和dev指针指向了同一个commitID,这就导致了无法区分是merge上去的还是刚创建的dev分支。解决方法我们放到后面的合并模式来谈

删除分支:git branch -d 分支名
当分支已经没用时,就删,没必要浪费空间
条件:该分支已经merge到master主分支了,所以此时该分支就已经没用了。
在这里插入图片描述
需要注意的点是删除a分支,此时HEAD一定不要指向a分支,需要切换分支。

合并冲突

情景:当创建分支a后,在分支a中提交了commitID,同时在master主分支也提交了commitID,即我们要合并的两个分支都提交了新的commitID,就会导致合并冲突。因为在同一个位置代码合并之后不知道是放置分支a对应位置的代码,还是master主分支对应位置的代码。
在这里插入图片描述
合并冲突只能够程序员来手动解决。我们来看一下ReadMe文件内部是什么
在这里插入图片描述
当我们手动解决冲突之后,我们一定要重新add + commit,而且一定要,才能解决合并冲突问题。
来看图像:
在这里插入图片描述
关键:我们手动解决合并冲突后,发现dev和master指向的不是同一个commitID了

合并模式

在git中,合并模式分为fast-forward(ff)模式,和no-fast-forward(no-ff)模式。
ff模式发生的情况就是在上方合并时只有一条分支提交commitID。
no-ff模式发生的情况就是合并时两条分支都提交commitID。

ff模式有个缺点,无法区分是merge合并时还是分支刚创建时,因为两种情况dev1和master分支指向的commitID都相同。但是,no-ff模式dev和master指向的commitID不相同,所以,要求不能使用ff模式合并,要求使用no-ff的方式合并。

指令:git merge --no-ff -m “xxxx” 被合并的分支名
在这里插入图片描述
来看操作以及效果:
在这里插入图片描述
我们发现dev2和master的commitID不相同了。
在这里插入图片描述
其实底层是怎样做的呢?就是dev2和master的commitID相同时,在master分支在提交一个commitID即可。这样一眼就可以看出该commitID是合并而来的。

同时我们可以通过git log --graph --pretty=oneline --abbrev-commit指令来以图像化的形式观察commitID。
在这里插入图片描述
同样的,也可以使用该指令来观察文章之前的分支结构

分支策略

这里我们提到的是概念。
master分支运用场景:线上环境(如app,小程序),此时用户是可以访问到的。所以要求必须稳定。
dev分支等:未测试的开发人员提交的代码,不稳定,存在bug。

结论:利用分支进行多人协作+在分支上进行研发,不能在master主分支修改(一定不能再master主分支上修改)

bug分支

情景:当我们在自己的分支上正在研发时,突然发现在master主分支上发现bug,我们该如何做来修改master主分支的bug,同时保证自己分支的代码不被丢弃呢?
在这里插入图片描述
1:将dev分支中未开发完的代码放到stash区域先存储起来,防止丢失。
git stash
细节:该指令只能够将工作区已经被git追踪的文件的修改放大stash区域。
扩展指令:
git stash list:看存储区(stash)存了哪些东西
git stash pop:取出存储区(stash)存的内容
在这里插入图片描述
我们通过观察 .git的目录结构,就会发现新增了stash存储区域
在这里插入图片描述

2:在master主分支创建fix_bug分支,在该分支中完成bug修改,随后合并到主分支
在这里插入图片描述
在这里插入图片描述
3:回到正在开发的分支,在stash区域拿出先前已经开发的代码,为了防止合并冲突,在dev分支合并master分支,在本地分支解决手动修改冲突问题
细节:合并冲突不要直接到master主分支上去改,防止造成修改错误
在这里插入图片描述
此时由于bugmaster分支有新的commitID,dev2分支开发完成之后也会有新的commitID,肯定会造成合并冲突。但是选择在dev2分支解决冲突。
在这里插入图片描述
手动解决冲突后一定要在commit一下。
在这里插入图片描述
4:bug修改好后,最后将dev分支合并到master分支
注意使用no-ff的方式合并。
在这里插入图片描述
这样就完成了bug分支的处理

强制删除分支

当我们正在进行本地分支开发时,发现该功能不需要了,所以需要删除该分支。但是该分支还没有被merge。
既然是删除分支,HEAD肯定不能指向将要被删除的分支上。
指令 :git branch -D 分支名
在这里插入图片描述


文章转载自:

http://b1sAxLbC.ybgpk.cn
http://loAlddGE.ybgpk.cn
http://GKj8Lwmb.ybgpk.cn
http://CocWg8P7.ybgpk.cn
http://dQiCitBy.ybgpk.cn
http://73y3A5RI.ybgpk.cn
http://4BWhaz3T.ybgpk.cn
http://XlA5wlqh.ybgpk.cn
http://6cJt3swI.ybgpk.cn
http://atKVoreS.ybgpk.cn
http://w7AvCcko.ybgpk.cn
http://fXfwSfsP.ybgpk.cn
http://qGjoVJr7.ybgpk.cn
http://35fUcB1R.ybgpk.cn
http://c3lPuRSV.ybgpk.cn
http://4XLOQFko.ybgpk.cn
http://AdU3krQm.ybgpk.cn
http://SAPrUQxX.ybgpk.cn
http://oAwfkjLN.ybgpk.cn
http://9GSWQLSu.ybgpk.cn
http://LdPXRxss.ybgpk.cn
http://pydvZm3c.ybgpk.cn
http://yq47a33L.ybgpk.cn
http://B782U8fi.ybgpk.cn
http://fS68w9Lw.ybgpk.cn
http://51kBjo70.ybgpk.cn
http://0QtSkHMC.ybgpk.cn
http://5dUGfrr0.ybgpk.cn
http://DH9y5iky.ybgpk.cn
http://3atvTHvJ.ybgpk.cn
http://www.dtcms.com/a/387066.html

相关文章:

  • LoRaWAN方案详解:2025年LoRaWAN技术创新与行业发展趋势
  • 【Leetcode hot 100】108.将有序数组转换为二叉搜索树
  • 打包数据集解析及大模型强化学习拓展阅读(96)
  • 软考-系统架构设计师 系统分析与设计详细讲解
  • 什么是信创产品?信创产品认证有哪些标准?
  • docker和虚拟机对比
  • AI: Android 运行ONNX模型
  • transformer各层的输入输出
  • lvgl图形库和qt图形库比较
  • 如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘PIL’ 问题
  • 搭建 PHP 网站
  • 流式分析:细胞分群方法
  • Redis 底层数据结构之 Dict(字典)
  • UE 最短上手路线
  • 动手学Agent:Agent设计模式——构建有效Agent的7种模型
  • 苍穹外卖day01
  • 《LINUX系统编程》笔记p14
  • 可直接落地的pytest+request+allure接口自动化框架
  • 【精品资料鉴赏】267页政务大数据资源平台建设方案
  • 面试前端遇到的问题
  • 【深度学习计算机视觉】05:多尺度目标检测——从理论到YOLOv5实践
  • STM32 通过USB的Mass Storage Class读写挂载的SD卡出现卡死问题
  • 【Nginx开荒攻略】Nginx基本服务配置:从启动到运维的完整指南
  • 《漫威争锋》公布开发者愿景视频:介绍1.5版本的内容
  • Isight许可管理与其他软件集成的方法
  • 论文提纲:学术写作的“蓝图”,如何用AI工具沁言学术高效构建?
  • 快速解决云服务器的数据库PhpMyAdmin登录问题
  • 知识更新缺乏责任人会带来哪些风险
  • 容器化部署番外篇之Nexus3搭建私有仓库09
  • 计算机视觉(opencv)实战二十四——扫描答题卡打分