Git 仓库中 -- 代码冲突产生、定位、解决的流程

目录

  • 前置知识
  • 1 工具环境
  • 2 冲突的产生
    • 2.1 仓库中的源代码
    • 2.2 人员 A 首先更改代码
    • 2.3 人员 B 更改代码,产生冲突
      • 2.3.1 第一次错误提示:
      • 2.3.2 第二次错误提示:
  • 3 查看冲突
  • 4 手动解决冲突
    • 4.1 方式一
    • 4.2 方式二(tortoisegit)
  • 5 合并冲突后重新commit
  • 6 合并冲突后重新 push

前置知识

远程仓库: 是指存储在远程服务器上的Git仓库,如 github、gitee 中创建的仓库
本地仓库: 是指存储在开发者本地计算机上的Git仓库。开发者可以在本地仓库中进行代码修改,而这些变更只影响到本地仓库。开发者可以将本地仓库中的代码推送(Push)到远程仓库,也可以从远程仓库拉取(Pull)最新的代码到本地仓库。

1 工具环境

git + tortoisegit

2 冲突的产生

举例说明,在当前分支上,有一段代码是这样的

<h2>金融领域情感分析系统</h2>

人员 A 开始开发,将代码修改为如下

<h2>金融领域情感分析系统,第一次更改</h2>

并且将代码 push 到远程仓库

但是在 A 将代码 push 之前,人员 B 就开始开发,将代码修改为如下

<h2>金融领域情感分析系统,第二次更改</h2>

A 人员 push 代码后,B 才开发完,准备提交代码,但由于 A B 都修改了同一行代码,就造成了代码冲突,无法 push 上去

下面 DEMO 记录了冲突产生、寻找、解决的完整流程

2.1 仓库中的源代码

源代码如下:
在这里插入图片描述
目前有两个人员 A、B 进行开发任务,基于当前代码 clone 到本地

2.2 人员 A 首先更改代码

A 将代码进行修改,并 push 代码至远程仓库
在这里插入图片描述

2.3 人员 B 更改代码,产生冲突

B 人员原本代码如下

在这里插入图片描述
为了模拟代码冲突,修改代码如下

在这里插入图片描述

然后 B 执行 commit,commit 是不会有错误的,如下图

在这里插入图片描述

commit 成功后,进行 push 操作,到这一步就会提示 error,如下图

2.3.1 第一次错误提示:

在这里插入图片描述

上图的的红色error,表明:这是由于远程库与本地库代码不一致造成的说通俗点,就是远程仓库存在一些新代码,你没有拉取 (pull),根据下面的提示也可以知道,我们需要进行 git pull 操作
接下来执行 git pull 命令, git pull 会拉取远程仓库的代码至本地,进行代码合并

2.3.2 第二次错误提示:

如下图,我执行了 git pull,希望将远程仓库的代码拉取同步,一般情况下,远程仓库的代码会自动合并到我的本地,但是!由于 A B 人员修改过同一行代码,必然会造成冲突,。git pull会提示错误:CONFLICT (冲突)
在这里插入图片描述
图中有两处信息提示值得我们注意:

  • 1 提示:CONFLICT (content): Merge conflict in src/components/myHeader.vue,表示该文件存在冲突
  • 2 提示:Automatic merge failed; fix conflicts and then commit the result.,表示需要我们自己手动解决冲突,然后再次进行 commit

说通俗点,就是由于 A B 人员修改过同一行代码,必然会造成冲突,需要我们自己手动解决冲突,也就是,我们手动对代码进行合并,将冲突的代码合并起来,再重新进行 commit push

3 查看冲突

下面我们来看看是哪些具体代码产生了冲突
此时我们打开文件夹,可以看到有冲突的文件会携带一个 黄色的警告标识
在这里插入图片描述
我们使用 VScode 打开,可以看到当前代码会使用如下符号,将代码分隔开

<<<<<<<<<HEAD
代码
==========
代码
>>>>>>>>>>

如下图所示:

在这里插入图片描述

这些 <<<<< >>>>> 符号表示什么意思?我将这里分为三个重要的部分

  • 1 黄色区域:为我们提供了一些快捷的解决冲突方式
    • 采用当前更改:代码会抛弃人员 A 的更改,仅保留人员 B 的更改,一般不会使用
    • 采用传入的更改:代码会抛弃人员 B 的更改,仅保留人员 A 的更改,一般不会使用
    • 保留双方更改:A 和 B 的更改都会被保留下来,一般不会使用
    • 比较变更:会打开一个界面,我们可以更清晰的看到代码变更
  • 2 红色区域:这里是人员 B 修改的代码,即本次提交作者改的代码
  • 3 绿色区域:这里是人员 A 修改的代码,即上一次提交作者改的代码

到此,我们就知道了哪里的代码产生了冲突

4 手动解决冲突

接下来,我们要手动,将冲突的代码合并起来

4.1 方式一

方式一是使用编辑器 vscode 进行修改,打开编辑器,如下图

在这里插入图片描述

上一节中,已经解释了 <<<<< 和 >>>>>> 分隔代码的含义
假设我们目前希望,A B的代码都保留,即保留所有文案:“第一次更改”和“第二次更改”和“”按钮,我们只需要在编辑器中,将代码合并为我们希望的样子,并删除多余的内容,如下图所示
在这里插入图片描述
保存后,然后右键选择文件,点击 resolve,表示将冲突已经解决,文件的黄色警告就会消失
在这里插入图片描述
在这里插入图片描述

4.2 方式二(tortoisegit)

在这里插入图片描述

左上:人员 A 的修改
右上:人员 B 的修改
下面:我们需要手动处理合并,即我们希望怎么保留代码,将代码写在下面
其中,黄色表示该部分代码已被删除,我们要将保留的代码写在红色区域
在这里插入图片描述
如果我们希望,将人员A的修改,和人员B的修改都保留,那么可以在下面的区域,将文案“第一次更改”“第二个更改”都添加上,即代码会被合并为这样
在这里插入图片描述
保存关闭窗口,右键选择文件,点击 resolve,表示将冲突已经解决,文件的黄色警告就会消失
在这里插入图片描述

5 合并冲突后重新commit

到这里,我们已经将冲突合并
我们需要重新进行 commit 和 push操作

在这里插入图片描述
此时,message 上自动会有文案如下图
表示当前 commit 的代码合并了冲突

在这里插入图片描述
点击 commit ,会出现弹窗,点击 ignore

在这里插入图片描述

6 合并冲突后重新 push

执行 git push,代码提交成功
在这里插入图片描述
进入 github 仓库中,查看代码,是我们手动合并后的效果

在这里插入图片描述
到此代码冲突的问题就解决好了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mysql设置密码,修改密码,破解密码

目录 mysql官方文档 1. mysql中文文档地址&#xff1a; 2. mysql英文文档地址&#xff1a; 一、数据库设置密码&#xff1a; 1.命令行模式&#xff1a; 2.进入数据库设置密码&#xff1a; 二、数据库修改密码&#xff08;需要知道旧密码&#xff09;&#xff1a; 1.命令…

vue 展示svg矢量图可缩放拖动

使用插件&#xff1a;svg-pan-zoom <template> <!-- svg图--><div id"svgContainer"></div> </template><script> import svgPanZoom from svg-pan-zoom import svgFile from ../datav/img/220kVscb.svg // 路径根据实际情况调…

同旺科技 FLUKE ADPT 隔离版发布 ---- 说明书

所需设备&#xff1a; 1、FLUKE ADPT 隔离版 内附链接&#xff1b; 应用于&#xff1a;福禄克Fluke 12E / 15BMax / 17B Max / 101 / 106 / 107 应用于&#xff1a;福禄克Fluke 15B / 17B / 18B

Spring 事件监听

参考&#xff1a;Spring事件监听流程分析【源码浅析】_private void processbean(final string beanname, fi-CSDN博客 一、简介 Spring早期通过实现ApplicationListener接口定义监听事件&#xff0c;Spring 4.2开始通过EventListener注解实现监听事件 FunctionalInterface p…

栈和队列的经典例题,LeetCode 括号匹配问题;栈实现队列;队列实现栈;队列带环问题

1.前序 又有很久没有更新文章了&#xff0c;这次带你们手撕几道基础题&#xff1b;真的就和康纳吃饭一样简单&#xff01;&#xff01;&#xff01; 如果还不会队列和栈的可以去看看之前写的博客&#xff1b; 栈的实现 队列概念以及实现 <- 快速传送 目录 1.前序 …

HTTP响应的基本概念

目录 HTTP响应中的一些信息 HTTPS HTTP响应中的一些信息 状态码&#xff1a;描述了这次HTTP请求是否成功&#xff0c;以及失败的原因。 1&#xff09;200 ---OK 表示这次访问成功了。 2&#xff09;404 ---Not Found 表示客户端请求的资源在服务器这边不存在。 3&a…

线性表(从数据结构的三要素出发)

文章目录 逻辑结构存储结构顺序存储链式存储单链表双链表循环单链表循环双链表静态链表 数据的操作顺序结构链式结构单链表双链表 逻辑结构 线性表是具有相同数据类型的 n ( n ≥ 0 ) n(n≥0) n(n≥0)个数据元素的有限序列&#xff0c;其中 n n n为表长&#xff0c;当 n 0 n0…

KMP算法【C++】

KMP算法测试 KMP 算法详解 根据解释写出对应的C代码进行测试&#xff0c;也可以再整理成一个函数 #include <iostream> #include <vector>class KMP { private:std::string m_pat;//被匹配的字符串std::vector<std::vector<int>> m_dp;//状态二维数组…

WXSS模板样式-全局样式和局部样式

一、WXSS 1.WXSS WXSS(WeiXin Style Sheets)是一套样式语言&#xff0c;用于美化WXML的组件样式&#xff0c;类似于网页开发中的CSS 2.WXSS和CSS的关系 WXSS具有CSS大部分特性&#xff0c;同时&#xff0c;WXSS还对CSS进行了扩充以及修改&#xff0c;以适应微信小程序的开发…

NetSuite Intercompany COGS科目设置问题

在22年底的NetSuite多公司功能串讲中&#xff0c;有一个题目是Intercompany COGS科目的设置问题。近期在项目上这个问题被密集讨论。为了方便分享&#xff0c;所以在此摘出来独立成文。有兴趣的同学也可以翻看之前的视频。 NetSuite知识会 第8谈 多公司功能串讲 NetSuite Inter…

Spring6基础笔记

Spring6 Log4j2 1、概述 1.1、Spring是什么&#xff1f; Spring 是一款主流的 Java EE 轻量级开源框架 &#xff0c;Spring 由“Spring 之父”Rod Johnson 提出并创立&#xff0c;其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发…

MPLS LDP原理与配置

1.LDP基本概念 &#xff08;1&#xff09;LDP协议概述 &#xff08;2&#xff09;LDP会话、LDP邻接体、LDP对等体 &#xff08;3&#xff09;LSR ID 与LDP ID &#xff08;4&#xff09;LDP消息 ⦁ 按照消息的功能&#xff0c;LDP消息一共可以分为四大类型&#xff1a;发现…

【C++STL详解(四)------vector的模拟实现】

文章目录 vector各函数接口总览vector当中的成员变量介绍默认成员函数构造函数1构造函数2构造函数3拷贝构造函数赋值运算符重载函数析构函数 迭代器相关函数begin和end 容量和大小相关函数size和capacityreserveresizeempty 修改容器内容相关函数push_backpop_backinserterases…

OpenStack平台Keystone组件的使用

1. 规划节点 安装基础服务的服务器规划 IP地址 主机名 节点 192.168.100.10 controller Openstack控制节点 2. 基础准备 使用机电云共享的单节点的openstack系统&#xff0c;自行修改虚拟网络编辑器、网络适配器&#xff0c;系统用户名&#xff1a;root&#xff0c;密…

【数据分析面试】53.推送消息的分布情况(SQL)

题目 我们有两个表&#xff0c;一个是 notification_deliveries 表&#xff0c;另一个是包含 created 和购买 conversion dates 的 users 表。如果用户没有购买&#xff0c;那么 conversion_date 列为 NULL。 编写一个查询&#xff0c;以获取用户转换前的推送通知总数的分布情…

51 单片机[4]:数码管显示

目标&#xff1a; 一次显示一个数字&#xff1a;在数码管第三位显示6.同时显示多个不同数字&#xff1a;在数码管前三位分别显示1, 2, 3. 一、认识数码管 LED数码管&#xff1a;数码管是一种简单、廉价的显示器&#xff0c;是由多个发光二极管封装在一起组成“8”字型的器件…

零拷贝(Zero-Copy)

1.背景 现在有这样一个场景&#xff0c;我们需要在本地选择一个文件后&#xff0c;然后上传到网络上。 我们再看看文件的内容数据的具体搬运过程&#xff1a; 你会发现&#xff0c;在整个文件搬运的过程中&#xff0c;发生了多次的数据拷贝和上下文转换。 4次数据拷贝&#…

amis 联动效果触发的几种方式

联动效果实现主要俩种方式: 1.表达式实现联动,基于组件内或数据链的变量变化的联动 比如&#xff1a; "source": "/amis/api/mock2/options/level2?name${name} " (必须是这种字符串拼接形式,在data数据映射中表达式不会触发联动) 所有初始化接口链…

【Linux】中的常见的重要指令(中)

目录 一、man指令 二、cp指令 三、cat指令 四、mv指令 五、more指令 六、less指令 七、head指令 八、tail指令 一、man指令 Linux的命令有很多参数&#xff0c;我们不可能全记住&#xff0c;我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man 语法: m…

【Spring Boot】深度复盘在开发搜索引擎项目中重难点的整理,以及遇到的困难和总结

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Spring Boot】深度复盘在开发搜索引擎项目中重难点的整理&#xff0c;以及遇到的困难和总结 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 什么是搜索引…