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

news2024/11/23 8:39:40

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/144593.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据NiFi(八):NiFi集群页面的组件工具栏介绍

NiFi集群页面的组件工具栏介绍 一、处理器(Processor)

WebLogic-执行队列

一&#xff0c;Tuning the Application Server 二&#xff0c;执行队列 Using Work Managers to Optimize Scheduled WorkThis chapter describes how WebLogic Server 12.1.3 lets you configure how your application prioritizes the execution of its work using a Work Ma…

java实现pdf转word,解决个别排版错乱问题

项目中要实现客户上传完pdf&#xff0c;上传成功后直接就转成word格式的&#xff0c;之前网上一些免费的转出来的word大致还行&#xff0c;但是有些排版就错乱了&#xff0c;如下图:下面这个是用java改造后的&#xff0c;效果如下&#xff0c;排版整齐&#xff0c;和pdf中的格式…

[总结] DDPM Diffusion模型各阶段训练和采样过程方案细节和代码逻辑汇总

DDPM Diffusion模型训练和采样过程细节汇总算法回顾框架理解DDPM训练过程采样过程Text-guiled DDPM训练过程采样过程Null-text guiled DDPM训练过程采样过程项目代码训练过程![在这里插入图片描述](https://img-blog.csdnimg.cn/f6213f8e584b4142b0c5a016cd23b63a.png)采样过程…

c++ std::funciona代替函数指针——结合std::bind

一、介绍std::function std::function是函数模板类&#xff08;是一个类&#xff09;。包含在#include <functional> 中。以前没有这个类的时候&#xff0c;我们在想定义一个回调函数指针&#xff0c;非常的麻烦。我们通常这样的定义&#xff1a; typedef void&#x…

智能小便冲洗器行业市场运行态势及未来发展潜力分析

2023-2029年中国智能小便冲洗器行业市场运行态势及未来发展潜力报告报告编号&#xff1a;1690632免费目录下载&#xff1a;http://www.cninfo360.com/yjbg/jdhy/cwjd/20230105/1690632.html本报告著作权归博研咨询所有&#xff0c;未经书面许可&#xff0c;任何组织和个人不得以…

Python人工智能之人脸识别face_recognition安装

face_recognition 模块使用系统环境搭建 系统环境 Ubuntu / deepin操作系统Python 3.6pycharm 开发工具 开发环境配置&#xff0c;安装各种系统包 人脸检测基于dlib&#xff0c;dlib依赖Boost和cmake 在windows中如果要使用dlib还是比较麻烦的&#xff0c;如果想省时间可以在…

【关于Linux中----文件系统、inode、软硬链接和动静态库】

文章目录一、理解文件系统和inode二、硬链接与软链接三、动静态库3.1、静态库与动态库3.2、生成静态库3.3、生成动态库一、理解文件系统和inode 在我前几篇博客中谈到的有关文件的话题&#xff0c;它们统一指的都是打开的文件&#xff0c;那么在这里&#xff0c;我要谈一下没有…

Java基础之《netty(22)—netty编码解码机制》

一、编码和解码的基本介绍 1、编写网络应用程序时&#xff0c;因为数据在网络中传输的都是二进制字节码数据&#xff0c;在发数据时就需要编码&#xff0c;接收数据时就需要解码 2、codec&#xff08;编解码器&#xff09;的组成部分有两个&#xff1a;decoder&#xff08;解…

看小红书排行榜,解构热点背后的出圈密码

导语&#xff1a; 随着消费升级&#xff0c;新中式茶饮也悄然“起风了”&#xff0c;传统茶从老一辈人的茶杯里&#xff0c;通过创新再造&#xff0c;成为年轻人的社交“新”头好&#xff0c;其衍生的“围炉煮茶”更成为小红书平台的热门话题。高流量曝光之路背后&#xff0c;…

一个精美的登录界面原来是这样做的

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏 玩归玩闹归闹&#xff0c;别拿java开玩笑 —————————————————— ⭐相关文章⭐ -通过窗口看…

隐形纱窗行业市场经营管理及发展趋势研究分析

2023-2029年中国隐形纱窗行业市场经营管理及发展趋势研究报告报告编号&#xff1a;1690619本报告著作权归博研咨询所有&#xff0c;未经书面许可&#xff0c;任何组织和个人不得以任何形式复制、传播或输出中华人民共和国境外。任何未经授权使用本报告的相关商业行为都将违反《…

【操作系统】计算机内存管理

1.内存管理目标rom-ram &#xff08;1&#xff09;为啥要做内存管理 计算机不可能所以用户进程和系统所需要的全部程序和数据放入主存&#xff0c;所以操作系统必须对内存空间进行合理有效的分配内存管理功能 内存分配回收&#xff1a;主存储器&#xff08;物理内存&#xff…

UOS系统启动盘制作

UOS系统启动盘制作一、统信启动盘制作工具1、UOS系统1&#xff09;在启动器打开启动盘制作工具![在这里插入图片描述](https://img-blog.csdnimg.cn/d51bf22e25a846cdb99f7f6317e9447f.png)2&#xff09;选择镜像3&#xff09;选择优盘并格式化4&#xff09;开始制作5&#xff…

第06章 面向对象编程(基础部分oop)

1、单独用变量来解决&#xff1a;不利于数据的管理, 把猫的三个属性拆开了。 2、使用数组的方式解决&#xff1a; 数据类型体现不出来&#xff0c;由于数组中的类型是一致的&#xff0c;所有不能体现出不同的数据类型。 只能通过下标的方式获取信息&#xff0c;这样会造成变量…

sql练习题3

学生表练习 1、查询所有的课程的名称以及对应的任课老师姓名 select course.cname,teacher.tname from course inner join teacher on course.teacher_id teacher.tid;2、查询学生表中男女生各有多少人 select gender as 性别,count(gender) as 个数 from student group b…

Java面向对象:封装、JavaBean和综合案例

目录封装基本概念总结如何更好的封装总结JavaBean补充知识&#xff1a;成员变量&#xff0c;局部变量区别综合案例封装 面向对象的三大特征:封装&#xff0c;继承&#xff0c;多态。 封装:告诉我们&#xff0c;如何正确设计对象的属性和方法。 封装的原则:对象代表什么&#x…

Java学习笔记 --- JDBC(2)

一、事务 1、JDBC程序中当一个Connection对象创建时&#xff0c;默认情况下是自动提交事务&#xff1a;每次执行一个SQL语句时&#xff0c;如果执行成功&#xff0c;就会向数据库自动提交&#xff0c;而不能回滚。 2、JDBC程序中为了让多个SQL语句作为一个整体执行&#xff0…

人工智能算法--启发式搜索与估值函数

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea; (*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &a…

Linux--阻塞信号--信号集--0104 05

1. 阻塞信号 1.1 信号其他相关常见概念 实际执行信号的处理过程称为信号递达。信号从产生到递达之间的状态称为信号未决。进程可以选择阻塞&#xff08;Block&#xff09;某个信号。被阻塞的信号保持在未决状态&#xff0c;直至进程解除对该信号的阻塞&#xff0c;才执行递达…