当前位置:   article > 正文

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

git合并文件丢失

我遇到了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拉出代码,不允许从子分支拉出

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/930937?site
推荐阅读
相关标签
  

闽ICP备14008679号