面试官:说说 git 发生冲突的场景?如何解决?​

2023-11-05

一、是什么

一般情况下,出现冲突的场景有如下:

  • 多个分支代码合并到一个分支时

  • 多个分支向同一个远端分支推送

具体情况就是,多个分支修改了同一个文件(任何地方)或者多个分支修改了同一个文件的名称

如果两个分支中分别修改了不同文件中的部分,是不会产生冲突,直接合并即可

应用在命令中,就是pushpullstashrebase等命令下都有可能产生冲突情况,从本质上来讲,都是mergepatch(应用补丁)时产生冲突

二、分析

在本地主分值master创建一个a.txt文件,文件起始位置写上master commit,如下:

然后提交到仓库:

  • git add a.txt

  • git commit -m 'master first commit'

创建一个新的分支featurel1分支,并进行切换,如下:

git checkout -b featurel1

然后修改a.txt文件首行文字为 featurel commit,然后添加到暂存区,并开始进行提交到仓库:

  • git add a.txt

  • git commit -m 'featurel  first change'

然后通过git checkout master切换到主分支,通过git merge进行合并,发现不会冲突

此时a.txt文件的内容变成featurel commit,没有出现冲突情况,这是因为git在内部发生了快速合并

如果当前分支的每一个提交(commit)都已经存在另一个分支里了,git 就会执行一个“快速向前”(fast forward)操作

git 不创建任何新的提交(commit),只是将当前分支指向合并进来的分支

如果此时切换到featurel分支,将文件的内容修改成featrue second commit,然后提交到本地仓库

然后切换到主分支,如果此时在a.txt文件再次修改,修改成mastet second commit,然后再次提交到本地仓库

此时,master分支和feature1分支各自都分别有新的提交,变成了下图所示:

这种情况下,无法执行快速合并,只能试图把各自的修改合并起来,但这种合并就可能会有冲突

现在通过git merge featurel进行分支合并,如下所示:

从冲突信息可以看到,a.txt发生冲突,必须手动解决冲突之后再提交

git status同样可以告知我们冲突的文件:

打开a.txt文件,可以看到如下内容:

git<<<<<<<=======>>>>>>>标记出不同分支的内容:

  • <<<<<<< 和 ======= 之间的区域就是当前更改的内容

  • ======= 和 >>>>>>> 之间的区域就是传入进来更改的内容

现在要做的事情就是将冲突的内容进行更改,对每个文件使用 git add 命令来将其标记为冲突已解决。一旦暂存这些原本有冲突的文件,Git就会将它们标记为冲突已解决然后再提交:

  • git add a.txt

  • git commit -m "conflict fixed"

此时master分支和feature1分支变成了下图所示:

使用git log命令可以看到合并的信息:

三、总结

Git无法自动合并分支时,就必须首先解决冲突,解决冲突后,再提交,合并完成

解决冲突就是把Git合并失败的文件手动编辑为我们期望的内容,再提交

参考文献

  • https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344

  • https://vue3js.cn/interview


--The End--

系列正在更新:9/10

点击下方卡片解锁更多

创作不易,星标、点赞、在看 三连支持

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

面试官:说说 git 发生冲突的场景?如何解决?​ 的相关文章

随机推荐

  • 新星计划->Python循环语句while_for_猜拳游戏的实现-学习笔记

    作者 芝士小熊饼干 系列专栏 数据结构 gt 线性表 支持我 点赞 收藏 留言 新星计划参与者 创作不易 十年运道龙困井 一朝得势入青云 金鲤岂是池中物 一遇风雨变化龙 本节将学会while for in的一些基础用法及注意事项 while
  • 编译预处理:#if

    用法 if
  • MYSQL threadPool 线程池

    概述 mysql企业版安装插件使用 限制最大并发 减少服务器CPU调度 mysql默认线程调度one thread per connection 每连接一个线程 线程池适合大量短连接或高并发情况 相关参数 Plain Text 查看线程池参
  • hive中判断一个字符串是否包含另一个子串的四种方法,sql中也可用

    hive中判断一个字符串是否包含另一个子串的四种方法 如果你有一个数据需求 需要从一个字段中 判断是否有一个字符串 你该怎么做 一 方法1 like和rlike 最能想到的方法 用like或者rlike select i want to t
  • gnome的win10主题

    1 下载gnome的win10主题包 http gnome look org content show php Windows 10 Theme content 171327 2 下载win10图标 http www mediafire c
  • 异常org.hibernate.QueryException: could not resolve property的原因 解决办法

    异常org hibernate QueryException could not resolve property的原因 解决办法 异常消息如下所示 org hibernate QueryException could not resolv
  • 一个在线卷积池化计算器-推荐不会计算的同学

    很多刚入门的身边的小伙伴不会计算卷积和池化 于是为了方便大家计算顺便根据卷积池化计算公式设计了一个在线计算器 卷积池化计算器地址 如果你很懒的话 可以用这个计算
  • 攻防世界新手训练区6之disabled_button

    0x00 Tips X老师今天上课讲了前端知识 然后给了大家一个不能按的按钮 小宁惊奇地发现这个按钮按不下去 到底怎么才能按下去呢 这里用到了html中的input标签的属性 input标签一般属性可以为text password butt
  • 租赁OLED透明屏:打造独特商业体验的智慧选择

    近年来 OLED透明屏技术在商业领域中迅速崛起 其高透明度和卓越的图像质量为商家创造了全新的展示方式 租赁OLED透明屏作为一种智慧选择 不仅能提升品牌形象和吸引力 还能创造与众不同的视觉体验 对此 尼伽将和大家一起深入探讨租赁OLED透明
  • 软件测试中有几种造数据的方法呢?

    大家好 今天我们一起来聊聊在测试过程中如何进行造数据 在微信群很多伙伴问到测试执行中需要大量的数据支撑或者性能测试需要数据时 如何更好的 更高效的进行数据制造呢 一起来探讨一下吧 一 SQL语句 1 直接通过insert语句 现在工具也都支
  • 数字图像处理中imfilter函数卷积算法代码(matlab)

    function result my imfilter I h 此函数只能处理灰度图像 m n size I i add zeros m 2 n 2 m add n add size i add 此处i add为填充0边后的矩阵图像 i a
  • java socket编程

    一 网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机 另一个就是找到主机后如何可靠高效的进行数据传输 在TCP IP协议中IP层主要负责网络主机的定位 数据传输的路由 由IP地址可以唯一地确定Internet上的一台主机
  • iOS语音识别报错 +[AFAggregator logDictationFailedWithError:] Error Domain=kAFAssistantErrorDomain Code=7 “

    iOS语音识别引擎报错问题查找记录笔记 报错信息 iOS语音识别 测试的时候发现总是报错误 Utility AFAggregator logDictationFailedWithError Error Domain kAFAssistant
  • 信心危机的Curve 事件

    经历了前两天的 Curve 事件 DeFi 板块正面临重大的信心危机 其中与 Curve 创始人 Michael Egorov 个人债务有关的借贷平台这两天可谓是提心吊胆 Egorov 已通过一些列操作来降低被清算的风险 例如 Curve
  • DCDC降压电路学习记录

    一 输出建立过程分析 BUCK电路的基本原理就不说了 首先来分析一个BUCK电路它到输出电压稳定这个过程是如何建立起来的 假设输入电压15V输出电压5V 达到稳态时的电流为3A 它的基本电路如图所示 当输入端上电 控制电路就工作起来 MOS
  • C++ auto关键字

    文章目录 C 98 auto C 11 auto auto的用法 注意事项 C 98 auto 早在C 98标准中就存在了auto关键字 那时的auto用于声明变量为自动变量 自动变量意为拥有自动的生命期 这是多余的 因为就算不使用auto
  • Qt 实现关闭窗口触发事件

    目录 Qt 实现关闭窗口触发事件 QT中窗口关闭自动销毁 参考 Qt保存MainWindow的窗口布局 并在再次打开时显示 https blog csdn net qq 39417283 article details 114024286
  • GitHub中公私钥的配置

    一 生成新 SSH 密钥 1 打开 git 的命令行窗口 即 Git Bash 2 粘贴下面的文本 替换为你的 GitHub 电子邮件地址 GitHub 中生成新的 SSH 密钥 ssh keygen t ed25519 C your em
  • ActiveMQ发布-订阅消息模式

    ActiveMQ发布 订阅消息模式 一 订阅杂志 二 发布 订阅消息模式 一 订阅杂志 我们很多人都订过杂志 其过程很简单 只要告诉邮局我们所要订的杂志名 投递的地址 付了钱就OK 出版社定期会将出版的杂志交给邮局 邮局会根据订阅的列表 将
  • 面试官:说说 git 发生冲突的场景?如何解决?​

    一 是什么 一般情况下 出现冲突的场景有如下 多个分支代码合并到一个分支时 多个分支向同一个远端分支推送 具体情况就是 多个分支修改了同一个文件 任何地方 或者多个分支修改了同一个文件的名称 如果两个分支中分别修改了不同文件中的部分 是不会