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

这篇具有很好参考价值的文章主要介绍了【问题处理】GIT合并解决冲突后,导致其他人代码遗失的排查。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失

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


项目场景

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

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失


问题描述

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

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失

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

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失
然后在弹出的框中,解决掉所有冲突,并点击Apply按钮

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失
然而,此刻右下角冒出了一个警告

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失

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

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失

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

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失

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


分析与处理:

1. 警告分析

首先我们分析警告的内容,显示的是要在提交信息中输入修改单号。这个提示是我们在hook中设置的提示
git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失

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

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

2. 文件分析

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

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失
可以看到关键文字:

All confilct fixed but you are still merging

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

3. 问题关键

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

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

4. 验证

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

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失

git merge 代码丢失,GIT,实战问题解决,git,git合并,合并冲突,代码丢失,代码遗失


解决策略

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

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

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

总结

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

所以GIT的操作还是要三思而后行,尤其是发现出了问题不知道该怎么办时,及时向其他同事咨询,避免事态恶化文章来源地址https://www.toymoban.com/news/detail-713928.html

到了这里,关于【问题处理】GIT合并解决冲突后,导致其他人代码遗失的排查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用IDEA工具处理git合并后的冲突的细节

    使用 IDEA 处理合并(merge) 使用IDEA处理git合并如果遇到冲突,对冲突文件的不冲突部分需要处理吗?会自动将双方不冲突的部分合并吗? 比如如下,使用 IDEA 合并 branch1 到 branch2 分支,出现了冲突,如下图: 如果处理好冲突,得到如下图: 我的问题是,绿色的部分如果不更新

    2024年02月03日
    浏览(55)
  • git代码合并、git解决冲突的方法?

    Git是一种分布式版本控制系统,它提供了多种方法来合并代码和解决冲突。下面是两个常见的场景以及对应的操作步骤: 合并分支 当我们在一个项目中有多个分支时,需要将不同分支中的代码合并到一起。假设我们有一个主分支master和一个开发分支dev,现在需要将dev分支合

    2024年02月02日
    浏览(53)
  • git使用常见问题(提交代码,合并冲突)

    git fetch 获取远程分支更新 git branch 查看本地分支 git branch -r 查看远程分支 git branch -a 查看所有分支(本地分支和远程分支) git clone 地址 克隆代码 git checkout 切换分支 git pull 同步到本地(拉) git push 推送至服务器 git checkout -b dev origin/master 基于主分支创建dev分支 git add . 添加

    2024年02月03日
    浏览(75)
  • Git合并多分支及冲突解决

    工作场景 工作场景中我们常常会遇到以下情况: 小明:靓仔/妹,我上线那天有事情,我的那个分支你帮我一起推一下 摸鱼崽:帮我也合一下,好哥哥 我:好(你)呀(md) 如果在这种时候你说我不会,我只会add,commit、push我本地的,你的分支我哪儿会啊,是不是有点尴尬

    2024年02月13日
    浏览(50)
  • 【Git】分支合并&冲突产生与解决

    文章学习自:麦兜搞IT,如有侵权,告知删除 合并操作在Git中属于最为核心的一个操作,包括三种合并方式:一种为fast forward ,需要满足有非常强的前提条件才能执行;一种为3 way merge方式,这种是我们工作中常见的;最后一种为变基rebase。另外,本篇文章也会深入讲解冲突

    2024年02月04日
    浏览(67)
  • 【Git教程】(六)分支合并 —— 合并过程,各类合并冲突及解决思路 ~

    使用 merge 命令来进行分支合并是 Git 中最重要的操作之一。虽然这一操作的底层算法很复杂,但调用起来却很简单。我们可以通过指定分支名称来选择待合并修改的分支。然后, Git 会基于合并的内容来创建一次新的提交。 下面,我们来看下图中的这个例子:在一群开发者在

    2024年04月25日
    浏览(47)
  • git必备知识 git使用常见问题(提交代码,合并冲突)

    git fetch 获取远程分支更新 git branch 查看本地分支 git branch -r 查看远程分支 git branch -a 查看所有分支(本地分支和远程分支) git clone 地址 克隆代码 git checkout 切换分支 git pull 同步到本地(拉) git push 推送至服务器 git checkout -b dev origin/master 基于主分支创建dev分支 git add . 添加

    2024年02月16日
    浏览(56)
  • Git合并冲突——both modified解决

    使用GitHub的时候,手欠在网页上修改了readme,然后今天在本地更新readme的时候又忘记了git pull先,然后就出现了merge conflict了,提示both modified 那么这个时候,我们不要慌,想办法解决冲突就好了 调出合并工具  回车使用工具,出现kdiff3图形界面,其中A区为修改前,B区为本地

    2024年02月16日
    浏览(43)
  • 如何解决Git合并分支造成的冲突

    一、造成冲突的场景         在我们在参与项目开发的时候,通常会创建公共的文件,但是当我们编码完成,使用git进行分支合并时,往往会出现合并冲突,也就是负责不同部分的开发人员会对同一个文件的同一个部分进行修改,这个时候就需要我们解决合并造成的冲突

    2023年04月23日
    浏览(62)
  • Git 分支简介-创建-合并-解决冲突-删除

    1.在版本控制系统(如Git)中,分支(Branch)是代码库的不同线路或路径,用于同时进行不同的开发工作。分支可以将代码库的状态 ‘‘复制’’ 到一个独立的环境中,使得在这个分支上进行的更改不会影响到其他分支。 2.使用分支的好处是可以同时进行多个并行的开发任务

    2024年03月21日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包