Git遇到冲突?解决也太简单了
创始人
2024-05-08 02:02:43
0

程序员宝藏库:https://gitee.com/sharetech_lee/CS-Books-Store

git冲突是开发过程中很难避免的,对很多git初学者来说也是比较有障碍和门槛的一部分知识。

我认为要想彻底理解一个问题,首先要清楚这个问题是怎么产生的,然后才可以更加简单的解决这个问题,而且这样做还可以从根本上加深对git的用法理解,避免每次遇到时都需要反反复复的搜索答案。

下面就逐步的介绍一下,帮助大家彻底理解什么是合并冲突?如何解决合并冲突?

什么是Git合并?什么是合并冲突?

首先,Git 是一个版本控制系统,可以保存所有文件版本的历史记录。 开发者可以随时回退到任何版本并检索旧版本。

假设,创建了一个名为 abc.txt 的文件并将其推送到 Git 仓库。 此时,该文件具有与其关联的当前版本。 现在,如果你的同事更改了同一个文件并将其推回仓库,则该文件关联了一个新版本。

Git Merge 是一项功能,可让使文件的当前内容与其他先前版本保持同步。 换句话说,Git 合并可帮助你在将新更改推送到同一文件之前合并来自其他开发人员的更改。

img

在 Git 合并的过程中,需要理解两件事情:

  • 更改:文件的两个版本之间发生了什么类型的操作? 添加或删除新内容,或更新现有内容。
  • 区域:更改的区域有两种可能性。 更改发生在文件的不同区域或更改发生在文件的同一区域。 同一区域意味着开发人员围绕文件的同一位置(例如,段落、行等)进行了更改。

如果更改不同区域时,这种情况比较简单,Git 使用自动合并策略自动处理大多数这些情况。

但是当更改发生在文件的同一区域时,Git 不会执行自动合并,它会提示冲突让开发者解决。

以一个具体的例子来解释合并冲突的产生过程:

  • 张三更改了文件abx.txt,然后把它提交到了远程仓库
  • 李四并不知道张三改了这个文件,与此同时,它也对同一文件、同一区域做了更改
  • 李四把更改推送到远程仓库,这是Git会提示版本过旧,需要更新
  • 李四重新从远程仓库拉取代码更新,再次提交时会收到自动合并冲突的警告

img

这个过程是不是似曾相识?

这就是合并冲突以及它的产生过程,下面就来介绍如何解决合并冲突!

如何解决合并冲突?

解决合并冲突其实并不难,在90%的情况下,当你对内容变化清楚的时候就会简单很多。

接着前面的例子,李四更改abc.txt之后,本地文件就包含自己的修改和张三的修改。所以,接下来就需要选择具体的处理措施:

  • 保留张三的更改并删除自己的更改
  • 删除张三的更改并保留自己的更改
  • 保留张三和自己的更改
  • 删除张三和自己的更改

应该选择哪一个呢? 这完全取决于项目的需求。 但是,至少要保证即将发生的变化,这样才知道选择何种措施。然后才可以逐步解决冲突。

下面就来逐步解决冲突!

场景1:修改同一文件同一区域

当 Git 由于更改在同一区域中而无法执行自动合并时,它会用特殊字符指示冲突的区域,字符序列是这样的:

  • <<<<<<<
  • =======
  • >>>>>>>

<<<<<<< 和 ======= 之间的所有内容都是你的本地更改,这些更改还不在远程存储库中。 ======= 和 >>>>>>>> 之间的所有行都是来自远程存储库或另一个分支的更改。

接着前面的例子,假如张三更改后的内容是:

- Eat
- Read
- Gym

李四更改后的内容是:

- Eat
- Read
- Sleep

合并时就会产生下面冲突:

- Eat
- Read
<<<<<<< HEAD
- Sleep
=======
- Gym
>>>>>>>

接下来就需要对比这两部分内容,做出自己的选择,应该保留哪一个或者删除哪一个,这个完全取决于业务的现实情况。

在接受了更改之后,还没有结束,还需要做如下操作:

git add 
git commit -m "Message"
git push

这样就解决了合并冲突。

场景2:文件在远程/其他分支被删除

在删除的文件合并冲突中,一个开发人员在一个分支中删除一个文件,而另一个开发人员在另一个分支中编辑同一个文件。 在这种情况下,你需要决定是要保留该文件还是删除它。

要将已删除的文件添加回你的分支,需要执行以下操作:

git add 

如果确定要删除这个问津啊,就执行下面操作:

git rm 

然后,就是把更改提交:

git commit -m "Message"
git push

上面2种场景就是git冲突中比较常见的现象,其实,在git使用过程中很多报错或者告警信息都提示的非常情况,我们如果能够轻松的读懂报错信息、理解基本原理以及问题发生原因,其实解决问题就是水到渠成的事情!

建议大家有空可以多浏览Github,有很多好用的开源免费工具。但是,目前Github上项目多如牛毛,而且刷榜现在也非常严重,想要找到优质的项目变得越来越难。这里,给大家推荐Github上一个非常不错的项目《DevWeekly》,这个项目每周都会精挑细选一些优质的开源项目,涵盖C++、JAVA、JavaScript、Python、Go等不同编程语言。此外,还有一些开源工具、优秀的技术文章,而且考虑到很多同学访问Github不方便的问题,我还特意同步到了Gitee,建议大家看一下:

https://gitee.com/sharetech_lee/DevWeekly

hello,大家好,我是Jackpop,重点大学本科毕业后保送到哈工大计算数学专业读研,有多年国内头部互联网、IT公司工作经验,先后从事过计算机视觉、推荐系统、后端、数据等相关工作。如果同学们在升学考研、职业规划、高考志愿、简历优化、技术学习等方面有困惑,欢迎大家前来咨询!

相关内容

热门资讯

安卓系统短消息提醒,安卓系统短... 你有没有发现,手机里的短消息提醒功能有时候就像一个贴心的管家,有时候又像个爱闹腾的小孩子?今天,咱们...
安卓系统如何跳过密码,安卓系统... 你是不是也和我一样,有时候手机锁屏密码设置得太复杂,每次解锁都要费好大一番力气?别急,今天就来教你怎...
鸿蒙系统功能与安卓,功能对比与... 你知道吗?最近手机圈里可是热闹非凡呢!华为的新操作系统鸿蒙系统(HarmonyOS)一经推出,就引发...
安卓系统卡苹果系统不卡,揭秘两... 你有没有发现,身边的朋友都在争论安卓系统和苹果系统哪个更好?其实,这个问题就像是在问谁家的孩子更聪明...
安卓系统卡解决了吗,安卓系统卡... 你有没有遇到过安卓手机卡顿的问题?是不是每次打开应用都感觉像蜗牛爬行?别急,今天就来聊聊这个让人头疼...
华为安卓系统下载软件,畅享海量... 你有没有想过,手机里的系统就像是我们的大脑,而下载的软件就像是大脑里的各种功能?今天,就让我带你一起...
平板安卓7系统好吗,体验流畅与... 你有没有想过,你的平板电脑的安卓7系统到底怎么样呢?是不是觉得它既熟悉又有点陌生?别急,今天咱们就来...
鸿蒙系统和安卓10,跨时代操作... 你知道吗?最近科技圈可是炸开了锅,因为华为的新操作系统鸿蒙系统横空出世,而且它竟然和安卓10杠上了!...
苹果安卓和鸿蒙系统,三大操作系... 你有没有发现,现在的手机市场就像是一场精彩纷呈的武林大会,各路英雄齐聚一堂,各显神通?没错,说的就是...
鸿蒙怎么还原安卓系统,系统还原... 你是不是也和我一样,对鸿蒙系统里的安卓应用情有独钟呢?最近,不少小伙伴都在问,鸿蒙怎么还原安卓系统?...
荣耀10改回安卓系统,重拾纯净... 你有没有想过,你的荣耀10手机,曾经那般风光无限,如今却想要改回安卓系统呢?这可不是一件小事,得好好...
华为安卓系统设置权限,深度解析... 亲爱的手机控们,你是否曾为手机里那些层出不穷的权限请求而头疼?别急,今天就来给你详细解析一下华为安卓...
安卓刷系统的软件,探索系统升级... 你有没有遇到过手机卡顿、系统老化的问题?别急,今天就来给你安利几款超好用的安卓刷系统软件,让你的手机...
安卓系统投影怎么升级,轻松实现... 你有没有发现,你的安卓系统投影最近有点儿慢吞吞的,是不是也想给它来个升级,让它焕发新生呢?别急,今天...
安卓手机系统怎样加速,享受流畅... 你有没有发现,你的安卓手机最近变得有点“慢吞吞”的?别急,别急,今天就来给你支几招,让你的安卓手机瞬...
安卓系统怎么安装的,安卓系统安... 你有没有想过,你的安卓手机里那些神奇的APP是怎么来的呢?是不是觉得安装个APP就像变魔术一样简单?...
安卓系统下儿童编程,开启编程启... 你有没有想过,在这个科技飞速发展的时代,连小朋友也开始学习编程了呢?没错,就是那个在安卓系统下,孩子...
微信安卓系统转苹果系统,轻松实... 你有没有想过,从微信安卓系统转到苹果系统,这中间的转换过程,就像是一场说走就走的旅行,充满了未知和惊...
如何刷安卓8.0系统,安卓8.... 你有没有想过,让你的安卓手机升级到最新的8.0系统,让它焕发出全新的活力呢?别急,今天我就来给你详细...
安卓系统里查看路由,安卓系统下... 你是不是也和我一样,对家里的无线网络充满了好奇?想知道安卓手机里怎么查看路由器信息?那就跟着我一起探...