【git】消失的代码 git bug引起合并代码异常丢失(大部分人碰不到的BUG)

文章描述了一名开发者在使用git进行分支管理时遇到的代码丢失问题,源于错误的合并操作。作者分析了合并原理,指出从子分支拉取代码可能导致历史版本丢失,并强调了从master分支拉取新代码的重要性以防止类似问题。
摘要由CSDN通过智能技术生成

我遇到了git的合并bug,导致代码丢失:

流程是从master拉出一个开发分支A开发功能,上线后,再继续从A分支拉出一个AA分支继续开发功能,由于上线需要重命名一个以日期为标志的分支,我就在AA分支的基础上创建了release/2022/04/11分支。

此时由于master提交了很多其他同事分支贡献的代码,我将master代码合并到release/2022/04/11分支,不出意外的出现了冲突(注意,冲突才会导致合并异常导致丢失代码,但是这个代码丢失是在合并后,还未处理冲突前,未动任何文件(包括暂存区的文件)就立刻丢失了),但是丢失的文件并非是冲突文件,并且搜索不到对应文件修改的记录。

下面是2张关于丢失代码的某个文件内容的合并前对比:

来自master-test分支的代码:

在这里插入图片描述

来自个人开发分支的代码(模拟release/2022/04/11分支)

在这里插入图片描述

在开发分支进行合并前(merge拼错成了mrege,忽略,本地改了)

在这里插入图片描述

合并后冲突代码里并没有该文件,但是该文件的内容诡异的没有从master-test分支合并过来

在这里插入图片描述

出现问题是在上面这个最新的Merge,代码会丢失
在这里插入图片描述
点击右侧的Browse Files进去查看文件目录,并且点击到被丢失代码的那个文件后,现象如下:
神奇的是,查了仓库的文件记录,发现提交记录在history中可以看到(2周前),但是文件内只显示上一个版本的内容(1个月前)
在这里插入图片描述
点击右上角的History后:
注意,这边这个文件的History列表里显示的记录中,并不包含我的修改,也就是说,排除了我本地修改了这个文件,导致这个文件被git认为是最新版本,进而取代master代码的可能。
在这里插入图片描述

原因分析

PS:该问题导致了我们历史两次丢失代码,务必引起重视
相关git原理(含合并原理)
两次代码丢失现象为:

  1. 分支master代码 A->B->A,另一分支feature/doSomething A->B,合并时 A->B->A,虽然A修改时间最后,但会当做无修改,合并后结果为B,导致错误(这里的A、B指的是文件的修改)
  2. 分支master->f1->f2->release,合并master时将release内容当成最新,master内容丢失

应对的办法是:无论是什么环境,当一个新功能(或者新版本)需要开发,就必须严格从master拉出代码,不允许从子分支拉出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzxOnlineOk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值