Git从入门到熟练第九讲 合并分支和分支冲突

2023-05-16

前言:

上一章我们讲解了分支的创建和删除,以及对误删分支的恢复操作,git stash挂起分支修改。在这一讲我们则重点讲解分支合并git merge以及如何解决合并冲突。

目录

课前准备:

 9.1 合并分支

9.1.1 git diff

9.1.2 git merge

9.2  git合并冲突

9.2.1 merge tool

9.3 放弃分支合并

9.4 快速分支合并

课前准备:

下载并解压资源

https://download.csdn.net/download/qq_17204647/86969196?spm=1001.2014.3001.5503

选择make_merge_repos.sh,make_merge_ff.sh到你git操作的目录下。

 9.1 合并分支

分支的合并首先你至少要有两个分支,git默认将分支合并到你当前所在的分支。

实际操作:

在git目录下,输入下面命令

bash make_merge_repos.sh

然后你会得到一个mergesample文件夹,输入下面命令

cd mergesample      //进入mergesample文件
git lol             //上一章节设置的缩写 查看整个项目分支情况

得到如图:

 可以看到我们有两个分支,master和bugfix,而我们要做的是bugfix分支合并到master分支中去。

在此之前,我们可以先分析一下我们的文件,切换到master分支,然后运行文件夹中baz文件

git checkout master
bash baz

结果如下图

 运行显示错误,而打开baz文件,我们可以知道是因为代码分母设置为 0 导致的错误。

切换分支,再次运行该文件

git checkout bugfix
bash baz

得到结果如图

由此可知,分支是为了修复代码bug,修复完成后,我们需要将分支合并。

9.1.1 git diff

在合并时,git会分析两个分支文件的不同,我们可以通过git diff查看。

git diff master...bugfix

 得到如下图

diff中显示的是分支合并时,baz文件将会有的变化。

输入如下命令

git diff --name-status master...bugfix

 得到右图,

这是显示合并时改变的文件,M表示merge,将会把baz合并到master分支。

9.1.2 git merge

真正合并时,记得一定要先切换到你想要合并的主分支。因为当你运行git merge时,默认将分支合并到你当前的分支。

一般来讲,会有一个主分支(可以是master或其他),融合所有的分支。

命令如下

git checkout master
git merge bugfit

当你运行时,git可能会打开你默认的编辑器,关闭就好。得到结果如下图

 合并分支后,查看git分支如图

 当然,上面所有的操作都可以在git gui 中操作。

将原先文件删除,重新生成mergesample文件夹,命令如下

cd ..                       //返回上级目录
rm -rf mergesample          //删除mergesample文件
bash make_merge_repos.sh    //重新生成mergesample文件
cd mergesample              //进入mergesample文件
git checkout master         //切换到master分支
git gui                     //打开git gui

然后选择Merge > Local Merge

在新打开的窗口选择merge,就能够将分支合并。

9.2  git合并冲突

上一章中的合并时简单的分支合并,所以没有任何冲突,git能够自动决定如何合并两个分支的文件。但是实际上有时情况比较复杂,合并的时候就会导致冲突(实际上是git无法决定如何将修改合并)。

简单点解释,git合并是求同存异的一个过程,选择git分歧的部分,然后选择其中某一个作为最终版本。但是如果两个分支对同一个地方都有修改,git就不知道该选择哪一个,这个时候冲突就出现了,而我们要做的就是从两个分支中手动选择最后要保留的版本。

操作如下:

重新生成mergesample文件操作,切换到master分支,对baz分支进行修改。

git checkout master                               //切换到master分支
echo 'printf "The answer is %d"  %c' >> baz       //输入文本到baz
git commit -a -m "Adding printf"                  //提交修改

然后我们在尝试分支合并,结果如图

 可以看到,合并分支失败,因为有baz文件冲突。

而为了更直观看到冲突的代码,我们可以借用第三方工具。这里我们因为是windows系统所以选择KDiff3.

9.2.1 merge tool

KDiff3下载网址

KDiff3 download | SourceForge.net

下载并安装后,记住安装的位置,因为我们要在git中配置kdiff3.

配置方式一

git config --global merge.tool "kdiff3"
git config --global mergetool.kdiff3.path "ftware\KDiff3\kdiff3.exe(kdiff3安装路径)"

或者打开属性文件,自己修改

git config --global --edit

 配置好后,我们使用第三方工具,解决冲突

git mergetool 

得到如下图

 我们点击下面?<Merge conglict>位置,选择B或是C,变为下图

 然后保存文件,合并冲突工具自动检测冲突是否全部解决,解决了会在最下面显示如图信息

 最后,提交修改,就完成分支的合并。(这里不需要git add,因为kdiff3已经自动做过这个操作了,你只需要提交就可以。如果你疑惑自己的git工具在解决冲突后是否需要Git add,可以通过git status查看状态。)

git commit

9.3 放弃分支合并

有时候因为你选择了错误的分支合并,或者忘记回到主分支再合并,需要放弃合并分支时:

在合并过程中发现错误,即diff时想要放弃合并分支 ,输入下面命令即可

git merge --abort

如果你已经执行合并后才发现错误,想要退回操作,这个情况比较复杂,我会在之后详细说明。

9.4 快速分支合并

在创建新分支后,主分支一直没有其他提交,这样可以实现快速分支合并。快速合并后,你可以继续提交新的文件到分支中,这样分支又会和master分支分叉开。如下图

 实践操作:

运行 make_merge_ff.sh文件,得到ff文件夹。进入ff文件夹,

bash make_merge_ff.sh
cd ff

通过gui查看分支情况

gitk

得到如下图

 切换到master分支,并合并new_feature,结果下图

 可知git能够识别快速合并分支的情况。

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

Git从入门到熟练第九讲 合并分支和分支冲突 的相关文章

  • (每日一读2019.10.25)一种基于通用优化方法的多传感器局部里程计估计框架(VINS-Fusion)

    摘要 为了提高机器人的鲁棒性和自主性 越来越多的传感器被安装在机器人上 我们已经看到了不同平台上安装的各种传感器套件 例如地面车辆上的立体摄像机 手机上带有IMU 惯性测量单元 的单目摄像机以及空中机器人上带有IMU的立体摄像机 虽然过去已
  • Gazebo模型下载以及配置--解决Gazebo黑屏原因

    前往ExBot ROS专区下载Gazebo模型 https bitbucket org osrf gazebo models downloads 下载后把文件放在 gazebo下的models文件夹中 span class token fu
  • 相机内外参数以及畸变参数

    关于大佬们的一些见解 下面是引用知乎的一段文字 xff1a 我们从单目视觉说起 平时我们都说要做视觉识别 测量云云 xff0c 然后我们就会去拍照 xff0c 再对数字图像做各种处理 xff0c 颜色处理 灰度化 滤波 边缘检测 霍夫变换
  • cmake学习4--自定义编译选项

    CMake 允许为项目增加编译选项 xff0c 从而可以根据用户的环境和需求选择最合适的编译方案 例如 xff0c 可以将 MathFunctions 库设为一个可选的库 xff0c 如果该选项为 ON xff0c 就使用该库定义的数学函数
  • ROS与C++学习1

    ROS与C 入门教程 构建工作空间 构建Catkin包 搭建开发环境 catkin make 编写简单发布节点和订阅节点 编写简单服务端和客户端 使用类方法作为回调函数 使用Timers类 编写高级的发布器和订阅器 Callbacks和Sp
  • IAR的UI界面优化

    显示行数 Tools Options 点击 Editor Tab size xff1a 设置Tab键占用多少个空格Indent size xff1a 应该是设置过行时缩进多少个空格Insert tab xff1a 选了之后在删除Tab时 x
  • MYNTEYE小觅双目摄像头深度版+VINS测试

    小觅双目深度版性能分析 今年 xff08 18年 xff09 11月9号小觅智能科技的深度版双目相机上市 xff0c 于是我在12月初花了2999软妹币购买了120度视角的相机 其中我比较感兴趣的是 双目 43 惯导 43 结构光 的多传感
  • QT+ROS开发

    Qt Creator for ROS 如果想在Qt上进行ros包的开发和GUI界面开发 建议采用下面的方法 http fumacrom com 1mipW Setup Qt Creator for ROS Setup Ubuntu to a
  • PX4、APM无人机仿真连接QGC地面站记录(udp连接、更改home点等)

    文章目录 一 PX41 gazebo 仿真2 连接地面站3 更改 Home点 二 APM 仿真1 执行仿真指令2 连接地面站3 更改 Home 点 本文仅记录仿真指令 xff0c 搭建安装不在此 一 PX4 首先给飞控源码和子目录权限 sp
  • LeetCode 解题笔记(一)总

    文章目录 一 常用技巧二 常用翻译三 题目x 其他9 回文数 2021 12 0911 盛最多水的容器 2022 01 0515 三数之和 2022 01 14 17 电话号码的字母组合 2022 01 1520 有效的括号 2021 12
  • LeetCode 解题笔记(二)数组篇

    文章目录 一 基础篇26 删除排序数组中的重复 2022 01 16122 买卖股票的最佳时机 II 2022 01 17189 轮转数组 2022 01 18217 存在重复元素 2022 01 19136 只出现一次的数字 2021 1
  • LeetCode 解题笔记(四)链表

    文章目录 一 总结二 题目237 删除链表中的节点 xff08 2022 03 10 xff09 19 删除链表的倒数第 N 个结点 xff08 2022 03 11 xff09 206 反转链表 xff08 2022 03 18 xff0
  • QT Quick QML 实例之 Popup 弹出界面

    QT Quick QML 实例之 Popup 弹出界面 一 演示二 实现过程1 居中弹出2 正下方弹出 所有的热爱都要不遗余力 xff0c 真正喜欢它便给它更高的优先级 xff0c 和更多的时间吧 xff01 GIT工程文件在这里 QmlL
  • QGC(GGroundControl) 系统核心架构图

    关于QGC地面站其它文章请点击这里 QGC地面站 UML 核心类图 xff1a xff08 点击图片放大看效果更好 xff09 核心系统分析图 xff1a xff08 点击图片放大看效果更好 xff09 工程结构 xff1a 整个 QGC
  • Qt 国际化翻译,函数外部字符串、Map 翻译(QT_TRANSLATE_NOOP)

    文章目录 1 Qt 的翻译流程2 利用 QT TRANSLATE NOOP 翻译 GitHub 源码 QmlLearningPro xff0c 选择子工程 xff1a TranslationsDemo pro QML 其它文章请点击这里 Q
  • IAR新建工程

    下载库函数 本文介绍基于 IAR 43 官方标准固件库 xff0c 来新建 STM8S003F 工程 xff0c STM8S 的标准固件库可以到 ST 的官方网站中找到并下载 xff1a ST官网 1 在搜索栏上搜索 STM8S003F x
  • RTSP 推流和拉流记录(运行代码)

    文章目录 1 RTSP 推流2 RTSP 拉流 1 RTSP 推流 用C 43 43 11 实现的RTSP服务器和推流器 xff0c 链接如下 RtspServer GitHub原地址 xff1a https github com PHZ7
  • FFmpeg 中 RTSP推流桌面和Android设备延时测试

    文章目录 1 FFMPEG 推流 xff1a 1 1 FFmpeg 源码准备1 2 RTSP 推流服务器 2 执行流程2 1 启动服务器2 2 执行桌面推流2 3 播放 3 安卓测试 1 FFMPEG 推流 xff1a 1 1 FFmpeg
  • Windows 下 GitKraken 6.5.1免费版本安装

    文章目录 1 安装 6 5 1 版本2 更换快捷方式3 登录 用过 GitKraken 都说好 xff0c 不过 xff0c GitKraken 从 6 5 3 版本开始收费 xff0c 它的最后一个免费版本是 6 5 1 xff0c 当你
  • QT 中的多线程之 moveToThread

    文章目录 1 概述2 方法描述3 代码 xff1a 4 运行结果5 注意事项6 结语 1 概述 在 Qt 中 xff0c 多线程也被广泛用于实现后台任务 异步操作 多任务处理等功能 通过使用多线程 xff0c 可以提高程序的响应性和用户体验

随机推荐