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

news2024/9/20 22:42:17

目录

  • 前置知识
  • 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 仓库中,查看代码,是我们手动合并后的效果

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

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

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

相关文章

Vitis HLS 学习笔记--控制驱动任务示例

目录 1. 简介 2. 代码解析 2.1 kernel 代码回顾 2.2 功能分析 2.3 查看综合报告 2.4 查看 Schedule Viewer 2.5 查看 Dataflow Viewer 3. Vitis IDE的关键设置 3.1 加载数据文件 3.2 设置 Flow Target 3.3 配置 fifo 深度 4. 总结 1. 简介 本文对《Vitis HLS 学习…

CSAPP(datalab)解析

howManyBits /* howManyBits - 返回用二进制补码表示x所需的最小位数* 示例: howManyBits(12) 5* howManyBits(298) 10* howManyBits(-5) 4* howManyBits(0) 1* howManyBits(-1) 1* howManyBits(0x80000000) …

【Linux】TCP协议【上】{协议段属性:源端口号/目的端口号/序号/确认序号/窗口大小/紧急指针/标记位}

文章目录 1.引入2.协议段格式4位首部长度16位窗口大小32位序号思考三个问题【demo】标记位URG: 紧急指针是否有效提升某报文被处理优先级【0表示不设置1表示设置】ACK: 确认号是否有效PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走RST: 对方要求重新建立连接; 我们把携带R…

【C++】详解AVL树——平衡二叉搜索树

个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 祝福语&#xff1a;愿你拥抱自由的风 目录 二叉搜索树 AVL树概述 平衡因子 旋转情况分类 左单旋 右单旋 左右双旋 右左双旋 AVL树节点设计 AVL树设计 详解单旋 左单旋 右单旋 详解双旋 左右双旋 平衡因子情况如…

远程工作的数据安全挑战和解决策略

随着远程工作的普及&#xff0c;数据安全面临了前所未有的挑战。企业在应对这些挑战时&#xff0c;必须采取切实有效的策略来保护敏感信息。以下是远程工作数据安全的主要挑战和相应的解决策略&#xff1a; 数据安全挑战 设备丢失或被盗&#xff1a;员工在外工作时&#xff0c…

从 0 开始本地部署大语言模型

1、准备 ● Ollama&#xff1a;ollama.com ● Docker&#xff1a;https://docs.openwebui.com/ 2、下载 Ollama 进入 Ollama 官网&#xff0c;点击 Download 。 下载完成后&#xff0c;双击安装&#xff0c;什么都不需要勾选&#xff0c;直接下一步即可。安装完成&#xf…

算法之堆排序

堆排序是一种基于比较的排序算法&#xff0c;通过构建二叉堆&#xff08;Binary Heap&#xff09;&#xff0c;可以利用堆的性质进行高效的排序。二叉堆是一个完全二叉树&#xff0c;可以有最大堆和最小堆两种形式。在最大堆中&#xff0c;父节点的值总是大于或等于其子节点的值…

【TB作品】stm32单片机读取DS2401程序

DS2401是由Analog Devices公司生产的一种硅序列号芯片&#xff0c;它提供了一个绝对唯一的64位ROM识别码&#xff0c;用于确保可追溯性。以下是对DS2401器件的分析&#xff1a; 特点和优势&#xff1a; 唯一性&#xff1a;每个DS2401芯片都有一个独一无二的64位注册码&#x…

Redis机制-Redis缓存穿透,击穿,雪崩理解等问题的理解和学习

目录 一 缓存穿透问题 二 缓存击穿问题 三 缓存雪崩问题&#xff1a; 图1 正常的Redis缓存流程 一 缓存穿透问题 我们都知道Redis是一个存储键值对的非关系型数据库&#xff0c;那么当用户进行查询的时候&#xff0c;势必会从前端发起请求&#xff0c;从而数据从Redis缓存…

MySQL笔记第三天(从小白到入门)

文章目录 MySQL笔记SQL语言介绍数据库系统关系型数据库非关系型数据库SQL和数据库系统的关系数据库系统架构 MySQL的介绍概念MySQL的版本 MySQL的DDL操作-重点基本数据库操作基本表操作 MySQL的DML操作-重点insert-插入数据update-更新数据delete-删除数据 MySQL的约束-了解概述…

RabbitMQ .NET

setup rabbitmq docker run --namerabbit -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USERadmin -e RABBITMQ_DEFAULT_PASSxxx -d rabbitmq:management ip:15672 login nuget RabbitMQ.Client Send //1.1.实例化连接工厂 var factory new ConnectionFactory() …

WordPress搭建流程

1. 简介 WordPress 是一个 PHP 编写的网站制作平台。WordPress 本身免费,并且拥有众多的主题可以使用,适合用于搭建个人博客、公司官网、独立站等。 2. 环境准备 2.1 WordPress 下载 WordPress 可以在 Worpress中文官网 下载(如果后续要将后台调成中文的话,一定要从中文…

虚拟局域网(VLAN)

关键词&#xff1a;veth、vlan、bridge、iptables、nat、tcpdump、icmp、cidr、arp、路由表、计算机网络协议栈 前言 在过去的几十年里&#xff0c;互联网发展得非常快。许多新兴技术迅速崛起&#xff0c;也有不少曾经的主流技术被淘汰。然而&#xff0c;有些技术因为其基础性…

sqlserver 创建表,列及表,列描述

-- 创建表 CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,EmployeeName NVARCHAR(100),EmployeeEmail NVARCHAR(100) );-- 为表添加描述 EXEC sp_addextendedproperty name NMS_Description, value N员工信息表, level0type NSchema, level0name dbo, level1type N…

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

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

优化css样式的网站

一、按钮的css样式 https://neumorphism.io/#e0e0e0https://neumorphism.io/#e0e0e0 二、渐变样式 Fresh Background Gradients | WebGradients.com &#x1f48e;Come to WebGradients.com for 180 beautiful linear gradients in CSS3, Photoshop and Sketch. This collect…

Redisson-分布式锁单Redis节点模式

Redisson-分布式锁单Redis节点模式 为什么要用分布式锁&#xff1f; 使用分布式锁的主要目的是为了解决多线程或多进程并发访问共享资源时可能出现的竞争条件和数据一致性问题。举一些实际场㬌&#xff1a; 数据库并发控制&#xff1a;在分布式系统中&#xff0c;多个节点同…

【CTF Web】CTFShow web4 Writeup(SQL注入+PHP+字符型注入)

web4 1 管理员阿呆又失败了&#xff0c;这次一定要堵住漏洞 解法 注意到&#xff1a; <!-- flag in id 1000 -->拦截很多种字符&#xff0c;连 select 也不给用了。 if(preg_match("/or|\-|\\\|\/|\\*|\<|\>|\!|x|hex|\(|\)|\|select/i",$id)){die(&q…

抖音运营_如何做出优质的短视频

目录 一 短视频内容的构成 1 图像 2 字幕 3 声音 4 特效 5 描述 6 评论 二 短视频的热门类型 1 颜值圈粉类 2 知识教学类 3 幽默搞笑类 4 商品展示类 5 才艺技能类 6 评论解说类 三 热门短视频的特征 1 产生共鸣 2 正能量 3 紧跟热点话题 4 富有创意 四 短视…

计算机网络套接字知识(非常详细)从零基础入门到精通

本节重点 认识IP地址, 端口号, 网络字节序等网络编程中的基本概念; 学习socket api的基本用法; 一、预备知识 1.理解源IP地址和目的IP地址 ⭐在IP数据包头部中&#xff0c;有两个IP地址&#xff0c;分别叫做源IP地址和目的IP地址。 思考: 我们光有IP地址就可以完成通信了…