【问题处理】GIT合并解决冲突后,导致其他人代码遗失的排查

GIT合并解决冲突后,导致其他人代码遗失的排查

  • 项目场景
  • 问题描述
  • 分析与处理:
    • 1. 警告分析
    • 2. 文件分析
    • 3. 问题关键
    • 4. 验证
  • 解决策略
  • 总结

在这里插入图片描述

📕作者简介:战斧,从事金融IT行业,有着多年一线开发、架构经验;爱好广泛,乐于分享,致力于创作更多高质量内容
📗本文收录于 GIT 专栏,有需要者,可直接订阅专栏实时获取更新
📘高质量专栏 云原生、RabbitMQ、Spring全家桶 等仍在更新,欢迎指导
📙Zookeeper Redis kafka docker netty等诸多框架,以及架构与分布式专题即将上线,敬请期待


项目场景

同事目前在当前分支进行开发,主分支经历了比较大的改动,为了防止当前分支合并进主分支时有较多的冲突,所以开发完成后,仅提交到本地仓库,然后开发人员就尝试把主分支先合并进当前分支,相当于更新一下当前分支,最后再推送,结果合并冲突后,其他人代码的修改却奇怪的遗失了。

在这里插入图片描述


问题描述

为了搞清楚问题是如何发生的,我让其重现了一下他的操作,先把本地的当前分支和目标分支都更新到最新,然后使用IDEA自带的Merge into Current命令,想要把目标分支合并到当前分支

在这里插入图片描述

然后不出所料的发生了冲突,并弹出了冲突框

在这里插入图片描述
然后在弹出的框中,解决掉所有冲突,并点击Apply按钮

在这里插入图片描述
然而,此刻右下角冒出了一个警告

在这里插入图片描述

但是与此同时,目标的所有提交已经进入到工作区,把文件都修改掉了

在这里插入图片描述

此时,当尝试进行提交时,要提交的不仅是我们的内容,还包含了目标分支的内容,如图,当前分支其实只改了两个文件,但现在要提交的变成了数百个。

在这里插入图片描述

开发人员此时仅勾选了自己修改的两个文件进行了递交,成功解决了冲突,随之进行了推送。最终导致主分支上仅有自己的代码,其余同事的代码全部丢失了


分析与处理:

1. 警告分析

首先我们分析警告的内容,显示的是要在提交信息中输入修改单号。这个提示是我们在hook中设置的提示
在这里插入图片描述

在这里插入图片描述

这个提示本身没问题,但问题是,它的校验仅针对手动commit,此时它会校验提交内容。在合并的过程中虽然从底层来说,也会生成一个合并提交点,但毕竟不是commit,因此不会导致这种问题。

换句话说,这个提示是正常的。因为merge发生冲突后,会暂停,需要手工解决冲突后,开发者自行commit,此处IDEA的的APPLY按钮其实会帮我们进行commit,当然,它的commit信息肯定不会有什么修改单号,因而触发了这种提示 。所以,这是正常现象。

2. 文件分析

从IDEA中我们看到了上面的很多文件是待提交,其实用命令也能达到相同的效果,比如我们可以使用git status来检查一下

在这里插入图片描述
可以看到关键文字:

All confilct fixed but you are still merging

这段文字就是正常合并冲突后出现的,说明我们的合并其实并没有问题,解决冲突也没有问题,它下面这么多文件除了包含我们自己修改的文件,还包含了其他分支的修改记录。

3. 问题关键

既然合并本身,和解决冲突都没有问题,那问题出在哪呢?其实就出在最后进行提交的时候,开发同学因为觉得其他代码不是自己写的,所以并没有勾选,仅提交了自己写的那两个文件

殊不知,对于GIT来说,你不勾选他们的提交其实就相当于放弃了那些修改,当你最后把你的这次提交推送到主分支时,主分支就会遵循你的指令,用你此刻的文件状态覆盖掉原有的文件,相当于说,将那些文件的修改全都回退掉了

4. 验证

在demo工程上进行验证,在master分支修改并提交两个文件,而在master_copy分支修改其中一个文件的同一行,这样在master_copy分支进行merge,会产生一个文件冲突,两个文件待提交。如果我们只提交一个文件,然后再从master分支把它合并回来,就会发现另外一个文件的修改丢失了

在这里插入图片描述

在这里插入图片描述


解决策略

既然事故已经发生,我们现在还是需要来解决的,解决的办法其实很简单,两种思路:

第一种让开发者把那些未提交的内容再次提交,再次合并进来即可。但这样的话,这些文件的递交者就会变成开发者,而不是它们原来的修改者了

第二种就是还原,然后让开发者重新操作了。首先把master 和 master_copy 的分支还原,即还原到merge之前,然后重新合并,重新解决冲突,重新提交即可

总结

这次事故其实也有巧合的因素,因为公司有提交信息校验,所以导致合并冲突时,IDEAj解决冲突后的提交操作被拦截。导致需要开发手动进行提交,而恰巧合并的提交和普通的代码提交不一样,有一定的特殊性,所要提交的内容其实是两个分支与公共祖先的所有不同代码。如果开发者预先不知道这种情况,仅勾选你此次修改的部分来提交,相当于其他分支的修改被你放弃了。这将导致其他人的代码丢失

所以GIT的操作还是要三思而后行,尤其是发现出了问题不知道该怎么办时,及时向其他同事咨询,避免事态恶化

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT追祖寻宗:GPT-2论文要点解读

论文地址:Language Models are Unsupervised Multitask Learners 上篇:GPT-1论文要点解读 在上篇:GPT-1论文要点解读中我们介绍了GPT1论文中的相关要点内容,其实自GPT模型诞生以来,其核心模型架构基本没有太大的改变&a…

华为云云服务器云耀L实例评测 | 在华为云耀L实例上搭建电商店铺管理系统:一次场景体验

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

java写一个用于生成雪花id的工具类

我们创建一个类 叫 SnowflakeIdGenerator 作为生成雪花id的工具类 然后 编写代码如下 public class SnowflakeIdGenerator {private static final long START_TIMESTAMP 1609459200000L; // 设置起始时间戳,可以根据需要进行调整private static final long WORKER…

HBase 记录

HBase 管理命令 hbase hbck -details TABLE_NAME hbase hbck -repair TABLE_NAMEHBase概览 Master、RegionServer作用 RegionServer与Region关系 数据定位原理 https://blogs.apache.org/hbase/entry/hbase_who_needs_a_master RegionServer HBase Essentials.pdf (P25)…

四种常用的自动化测试框架

一直想仔细研究框架,写个流水账似的测试程序不难,写个低维护成本的测试框架就很难了,所以研究多种测试框架还是很有必要的,知道孰优孰劣,才能在开始编写框架的时候打好基础,今天读到了KiKi Zhao的翻译文章&…

中标麒麟--国产操作系统-九五小庞

那么,我国国产操作系统现状到底如何呢? 自 1999 年徐冠华部长一语点破我们的产业软肋之后,国产操作系统起步于国家“七五”计划期间,目前国产操作系统均是基于Linux内核进行的二次开发,中国国产操作系统进入Linux元年…

【网络】计算机网络基础

Linux网络 对网络的理解 在网络传输中存在的问题: 找到我们所需要传输的主机解决远距离数据传输丢失的问题怎么进行数据转发,路径选择的问题 有问题,就有解决方案; 我们把相同性质的问题放在一起,做出解决方案 解…

【Markdown】图片缩放

▚ 01 原图表示 语法为: ![替代文本](图片链接地址)其中,替代文本是在无法显示图片时显示的替代文本,而图片链接是指向图片的URL或相对路径。 例如,插入Panda图片: ![panda](https://img-blog.csdnimg.cn/e5f3…

(高频面试1)Redis缓存穿透、缓存击穿、缓存雪崩

目录 一:缓存数据 1.1 应用场景 1.2:缓存数据出现的问题 1.2.1 缓存穿透 1.2.2 解决办法 1.2.3 缓存击穿 1.2.4 解决办法 1.2.5 缓存雪崩 1.2.6 解决办法 一:缓存数据 1.1 应用场景 数据库查询结果缓存是一种常见的缓存应用场景&a…

MybatisPlus(5)

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 上篇讲了增删的操作,这篇讲修改操作中的一个问题以及它对应的…

DataX实现Mysql与ElasticSearch(ES)数据同步

文章目录 一、Linux环境要求二、准备工作2.1 Linux安装jdk2.2 linux安装python2.3 下载DataX: 三、DataX压缩包导入,解压缩四、编写同步Job五、执行Job六、定时更新6.1 创建定时任务6.2 提交定时任务6.3 查看定时任务 七、增量更新思路 一、Linux环境要求…

加密算法发展简介

1:对称加密算法 客户端加密数据和服务端解密数据,使用的相同的秘钥: 固定秘钥:双方约定好一个固定秘钥; 随机秘钥:双方约定每次建立连接的时候,某固定BYTE为秘钥; 缺点&#xff1a…

JK405R-SOP16录音芯片ic方案的功能简介,可以内置录音30秒-高采样率

一、简介 JK405R是一颗SOP16封装的录音芯片,专用于录音的应用,芯片内置了30秒的录音空间,同时还支持外扩 spiflash方便不同录音时长的应用需求。芯片内置MIC的放大器,并且增益可调 同时芯片还具备超低功耗,待机2uA。…

2023/9/17周报

摘要 本周阅读了两篇论文,其一为一种基于空气质量时频域特征提取的hybrid预测方法,另一篇为基于烛台与视觉几何群模型的 PM2.5 变化趋势特征提取与分类预测方法。在第一篇文章中,通过小波变化,对数据进行分频,并设计了…

Linux界的老古董

Slackware 是由 Patrick Volkerding 制作的 Linux 发行版,从 1993 年发布至今也一直在 Patrick 带领下进行维护。7 月 17 日,Slackware 才刚刚过完它 24 岁的生日,看似年纪轻轻的它,已然是 Linux 最古老的发行版。 Slackware 的发…

[vue问题]开发中问题集合

“TypeError: Cannot read property ‘Request’ of undefined” 这是测试文件的报错,最后发现是因为项目启动的时候就报错了,是其它错误导致的,所以测试文件才会提示这种错误,当启动报错修复后,该问题没有了 热加载…

[计组03]进程详解2

目录 应用程序 系统调用 驱动 软件 再看进程 进程管理 如何管理 ? 创建一个进程 注意 PCB 文件描述表 进程相关重点 为什么有进程调度 虚拟空间地址 这次我们从更加详细全面的角度看一下进程在计算机中体系中的展现 应用程序 应用程序 调动 系…

VR古迹复原——数字化复原圆明园,开创文化遗产保护新方式

圆明园是中国历史上一处重要的文化遗产,曾经被誉为“万园之园”,但在1860年的英法联军侵华战争中被毁。近年来,虚拟现实技术不断发展,广州华锐互动利用VR全景技术复原了圆明园,通过VR设备,人们可以在家中就…

CRM与chatGPT结合的效果

2023年ChatGPT是当之无愧的行业热词,从诞生到爆红短短5天,注册用户数就超过100万,截止到2023年1月底已经有超过1亿用户。在这样的背景下,Zoho CRM系统在业内较早推出集成ChatGPT的相关功能,接下来我们就来分享CRM接入C…

MySQL实现单个字段根据特定字符拆分

1.字段内容 2.想得到的效果 步骤1中,每一条记录的FJ字段,根据分号,拆分成多条,如下图所示: 3.具体实现 说明: SELECT DISTINCTsubstring_index(substring_index(a.要拆分的字段, 分隔字符, b.help_top…