Git遇到冲突?解决也太简单了

117 篇文章 5 订阅
50 篇文章 5 订阅

程序员宝藏库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 <files>
git commit -m "Message"
git push

这样就解决了合并冲突。

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

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

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

git add <file-name>

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

git rm <file-name>

然后,就是把更改提交:

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公司工作经验,先后从事过计算机视觉、推荐系统、后端、数据等相关工作。如果同学们在升学考研、职业规划、高考志愿、简历优化、技术学习等方面有困惑,欢迎大家前来咨询!

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
git merge 冲突是指在执行git merge命令时,发现两个分支之间存在冲突的情况。冲突的原因可能是两个分支在同一处修改了相同的文件或者代码段,导致无法自动合并。在这种情况下,Git需要手动解决冲突解决git merge冲突的方法有多种,以下是两种常见的解决方案: 1. 手动解决冲突:在执行git merge后,如果出现冲突Git会将冲突的文件标记出来。你可以使用文本编辑器打开这些文件,并查看冲突的地方。冲突的部分会被包含在一对特殊标记(如<<<<<<< HEAD、=======和>>>>>>>)之间。你需要根据需要,手动修改这些部分,将冲突解决掉。然后保存文件,再执行git add和git commit命令完成解决冲突的过程。 2. 使用git pull命令解决冲突:你可以使用一条简单的命令来解决冲突。首先,执行以下两条命令: git config pull.ff false git pull 这两条命令的作用是禁用fast-forward合并,并拉取最新的代码。如果在此过程中出现冲突Git会自动将冲突的文件标记出来。然后你可以编辑这些文件,解决冲突,并执行git add和git commit命令来完成解决冲突的过程。 需要注意的是,git merge命令在两个分支合并时可能会出现冲突。而git pull命令实际上是git fetch和git merge命令的组合,用于将另一个代码仓库中的变化合并到当前分支中。因此,在使用git pull命令时,也可能会遇到冲突的情况。 总结起来,解决git merge冲突的方法可以是手动解决冲突,也可以使用git pull命令解决冲突。具体的解决方法取决于个人偏好和具体情况。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Git merge 出现冲突的根源,如何解决各种类型的冲突](https://blog.csdn.net/weixin_44757863/article/details/121618060)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值