git:分支合并

2023-11-14

1.git 分支的合并(merge)

`假设我们此时需要修复dev分支上的某个bug,此时在dev分支上创建修复分支fix,然后推进fix分支.
当前的git仓库如图:

注:为了方便演示,dev分支上只有一个test.cpp源文件

`然后我们在fix分支上修复bug并做提交
在fix分支提交之后的git仓库如图:

 此时bug已经修复完毕,我们把dev和fix分支进行合并:
合并之后,dev和fix分支指向同一位置 

 合并以后我们就可以删除修复分支fix

git branch -d fix


2.快进合并

fast-forward 是一种特殊的 merge :被合并的分支真包含请求合并的分支。
如上述情况的dev和fix分支,被合并的分支(fix)真包含请求合并的分支(dev);

`git 并不会创建一个新的合并提交对象 (merge-commit) 以表达两个分支的合并,而是直接把 dev 的指针前移,修改为与 fix 一致,这就是 fast forward 合并(快进合并)。


3.git:分支的三方合并

假设当前的git仓库如图:

 我们在 add 分支添加一个源文件add.cpp,集结并做提交.
此时的git仓库如图:

 

假设此时我们想把add分支 和 dev分支进行合并:
`git会为合并分支自动识别出最佳的同源合并点,然后比较两个分支的差异,进行三方合并计算,然后进行合并.
通常三方合并git会用两个要合并的分支的末端提交节点和它们的共同祖先进行一次简单的三方合并计算.

上述情况的最佳的同源合并点就是 aee791
git会对dev,add分支的提交末端和aee791同源合并点三个节点进行合并计算,然后进行合并,同时创建一个包含合并结果的合并提交对象 (merge-commit).
上述情况比较简单,在add分支上添加了一个add.cpp源文件,dev分支上修改了test.cpp源文件,所以三方合并比较简单.合并成功后,新的合并提交节点就会同时添加add.cpp源文件和修改test.cpp源文件的内容.
如图:

 


4.冲突合并

如果三方合并计算时发生冲突,需要进行冲突合并.

 注:这种情况虽然不同分支修改的是同一源文件,但是修改的源文件的内容,位置不同,(c2 修改的是return 1; c3 修改的是 #include <stdio.h>),git会自动合并成功.

4.1 自动合并失败情形 1

 4.2 自动合并失败情形 2

 如果合并出现冲突,就需要我们去手工去修改对应的冲突位置,然后再进行手工合并.


5.使用 rebase 进行合并

分支合并时,除了 merge 之外,还可使用另一种方式 rebase 。

rebase 可以使历史更清晰。如果查看一个 rebased 分支的日志,它看起来像一个线性历史 : 似乎所有的工作都是串行发生的,即使原来是并行发生的。

假设当前的git仓库如图:

 

在分支合并时,可以使用 C4 引入的变更补丁,在 C3上重新应用它。在 git 中,这称为 rebase 。使用 rebase 命令,可以获取在一个分支上提交的所有更改,然后在另一个分支上重演这些更改。

这个操作是这样进行的: 首先转到两个分支的共同祖先 ( 你所在的分支和你 rebasing onto 的分支 ) ,获得你所在分支每次提交时引入的差异,将这些差异保存到临时文件中,将当前分支重置为与你要 rebasing onto 的分支相同的提交,最后依次应用每个更改。
操作过程如图:
`合并成功:

 `合并出现冲突(此情况为:要合并的两个分支末端提交节点对test.cpp同一位置进行了修改):

 rebase 进行合并时出现冲突,test.cpp源文件的内容:

 

在 rebase 的过程中,也许会出现冲突 (conflict) 。
在这种情况, git 会停止 rebase 并会让你去解决冲突(修改冲突文件的内容);在解决完冲突后,用 “git-stage” 命令去更新这些内容的索引 (index)
然后,你无需执行 git-commit, 只要执行 : git rebase –continue 这样 git 会继续应用 (apply) 余下的补丁。

解决冲突以后的源文件:

解决冲突以后的合并过程:

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

git:分支合并 的相关文章

随机推荐

  • linux gsoap服务端,gsoap linux下服务器端代码生成与测试

    二 解压压缩包 ios 三 进入cd gSoap gsoap 2 8 gsoap bin linux386函数 四 建立一个头文件serverTest h测试 gsoap ns service name calc gsoap ns serv
  • Python selenium错误:ElementNotInteractableException: Message: element not interactable: Element is not

    脚本没问题 但是执行时报错 selenium common exceptions ElementNotInteractableException Message element not interactable Element is not
  • [Python图像处理] 五.图像融合、加法运算及图像类型转换

    该系列文章是讲解Python OpenCV图像处理知识 前期主要讲解图像入门 OpenCV基础用法 中期讲解图像处理的各种算法 包括图像锐化算子 图像增强技术 图像分割等 后期结合深度学习研究图像识别 图像分类应用 希望文章对您有所帮助 如
  • javascript的深拷贝和浅拷贝

    当我们将一个变量的值赋给另外一个变量时 需要注意用的是深拷贝还是浅拷贝 深拷贝是另外开辟地址空间 浅拷贝是和被拷贝数据地址一样 详见 https github com YvetteLau Step By Step issues 17
  • element-ui 的confirm用法

    在点击函数里变嵌入一下代码 this confirm 确认删除 系统提示 confirmButtonText 确定 cancelButtonText 取消 cancelButtonClass btn custom cancel type w
  • 解决websocket使用@Autowired、@Value获取值为null解决方法

    解决webSocker中使用 Value获取配置文件中值为null 1 常规写法 在webSocker中使用 Value 取值为null 2 原因分析 3 解决问题 1 常规写法 在webSocker中使用 Value 取值为null Co
  • 浏览器渲染原理

    页面渲染流程 浏览器收到web网页的内容后会开始下载 HTML CSS JS 并绘制 DOM 树和 CSS 树 当两颗树都绘制完成后会合并成一个渲染树 然后再经过Layout Paint Composite 最终完成渲染 HTML 解析会被
  • hortonworks/registry配置详解

    1 美图 2 配置 deploy demo db registry cat conf registry yaml registries configuration modules name schema registry className
  • 什么是CSRF攻击,以及如何防御

    什么是CSRF攻击 以及如何防御 1 CSRF攻击的概念 2 CSRF攻击简单案例 2 1 银行网站项目 2 2 危险网站的项目 2 3 测试 3 默认的CSRF防御策略 4前后端分离的CSRF防御策略 1 CSRF攻击的概念 1 CSRF
  • MPI群通信与矩阵乘法的Fox算法实现

    原本以为 MPI天生只能在Linux上运行 但这次却发现了Intel MPI Library 这个好用的东西 基本不需要设置 安上之后 用自己能登录windows的帐号和密码注册就行了 虽然不是局域网上的机器 但也可以让我的双核CPU达到1
  • WebSocket协议之NGINX代理转发无法建立连接问题处理

    WebScoket协议如需要通过nginx代理 需要location 节点增加以下节点即可正常建立连接 需要配置以下节点 proxy http version 1 1 proxy set header Upgrade http upgrad
  • Python入门网络爬虫之精华版,赶快收藏

    相关文件 关注小编 私信小编领取哟 当然别忘了一件三连哟 公众号 Python日志 前言 Python学习网络爬虫主要分3个大的版块 抓取 分析 存储 另外 比较常用的爬虫框架Scrapy 这里最后也详细介绍一下 举例子 当我们在浏览器中输
  • STL 中集合操作相关算法

    merge 头文件 merge 算法定义在头文件 include 中 算法作用 merge 算法是合并两个有序的序列 合并结果拷贝到一个新的序列 前提是这两个序列的排序规则一样 代码示例 vector
  • vue---UI框架elementUI实现系统登录注册页

    https blog csdn net maidu xbd article details 87943243已经搭建好了vue开发环境 在本博客中 来介绍些结合element ui实现登录注册界面 界面效果展示如下图 实现的功能包括 首先安
  • 【数据结构】红黑树模拟实现

    一 红黑树底层原理 红黑树的底层可以看作是AVL树的变种 先前我们了解过AVL的模拟实现 avl对整棵树的控制还是非常严格的 因为高度差不能大于2 导致会经常发生旋转 旋转这个过程也会降低效率 所以为了整体的效率衍生出了红黑树 红黑树旋转的
  • 稳压二极管工作原理、重要参数意义和典型电路参数计算

    稳压二极管的工作原理 稳压二极管也叫稳压管 它在电路中一般起到稳定电压的作用 也可以为电路提供基准电压值 稳压二极管使用特殊工艺制造 这种工艺使它在反向击穿时仍然可以长时间稳定工作 不损坏 而工作在反向击穿状态的稳压管只要工作电流保持在一定
  • 电感磁芯公式

    NBA LI
  • [机缘参悟-89]:《本质思考》- 本质思考的7种习惯

    目录 一 精准性思考 精确 表面词语要精确 二 非歧义思考 深度 明确表面词语背后的动机 三 多维度思考 广度 全方面思考 四 反馈式思考 确认 反复确认 五 适应性思考 变化 因环境变化而变化 六 循环式思考 持续改进 逐渐得到问题的本质
  • linux more 下一页_Linux more命令如何使用?

    Linux下的more命令主要用于分屏显示 即内容超过一屏的文件 与cat命令有点区别 下面小编就给大家详细介绍下more命令 有兴趣的话不妨来了解下吧 more会以一页一页的显示方便使用者逐页阅读 而最基本的指令就是按空白键 space
  • git:分支合并

    1 git 分支的合并 merge 假设我们此时需要修复dev分支上的某个bug 此时在dev分支上创建修复分支fix 然后推进fix分支 当前的git仓库如图 注 为了方便演示 dev分支上只有一个test cpp源文件 然后我们在fix