gitlab合并分支_记一次gilab解决冲突后,导致当前分支混入其他分支的代码

gitlab合并分支_记一次gilab解决冲突后,导致当前分支混入其他分支的代码_第1张图片

事件起因:​我们正在开发新迭代的内容时,项目经理过来告诉我们,由于客户有些小需求和一些问题修复,要在中间穿插一个修复版本,晚上发布。

一般这种修复版本的情况,都是在master(正式环境的代码分支)分支,快速拉一个修复分支修复问题,我们拉master-2.1.4的分支,于是我们的故事开始了。​

在master-2.1.4上开发完成后,需要合并到dev、test(开发、测试),开发环境进行产品验收,测试环境测试同事验证功能。

一切都是那么的正常,突然发现在master-2.1.4分支中,出现了2.2版本的代码,我的第一想法是那个小逼崽子把dev的代码合并到了修复分支来了,我急忙看了一下提交记录,然而并没有出现 dev->master2.1.4的操作记录,简直把我搞得脑壳痛。没办法,晚上就要发布,时间紧,只能重新拉一个分支,把代码分离出来。​

把代码分离后,重新拉了一个分支,命名为master-2.1.4.final, 也告诉同事拉新拉分支的事情,于是我就开心的去开发本次迭代的内容了。原本以为事情就这样结束了,但是 !!四点的时候去看的时候,master2.1.4.final中又出现了dev中2.2版本的code。其中的操作记录,只有同事的提交记录和一个解决冲突的记录,没有其他记录了。查看解决冲突的明细,也没有把代码合过来的情况,这就把我搞到了。

于是我猜测,是同事把分支master2.1.4.final -> dev 合并的时候,出现冲突,解决冲突引起把dev的代码引入修复分析,于是我做了如下实验。

创建一个新的空项目 testGitlabError,为了模拟真是场景,我分别创建 开发和测试、线上环境,以及我们的主角master1。

git branch dev

git branch test

git branch master1

​这几个分支都有一个 README.md 的文件,里面的内容都是 `testGitlabEroor` ,

​我又在dev分支新建的一个txt的文件夹,dev文件如下

gitlab合并分支_记一次gilab解决冲突后,导致当前分支混入其他分支的代码_第2张图片

在master1分支的文件:只有一个 README.md文件,如下

gitlab合并分支_记一次gilab解决冲突后,导致当前分支混入其他分支的代码_第3张图片

为了让他产生冲突,在dev分支和master1分支同时操作README 文件,让他们出现冲突,同时在第一行,加上-master1和-dev,然后我们把master1合并到dev。然后提交

git add .

git commit -m "add comment"

git push origin 分支

我们去合并,于是出现了冲突,并解决冲突

gitlab合并分支_记一次gilab解决冲突后,导致当前分支混入其他分支的代码_第4张图片

于是我们惊奇的发现,原本在dev才有的txt文件,出现在master1中。

gitlab合并分支_记一次gilab解决冲突后,导致当前分支混入其他分支的代码_第5张图片

复原了当时的问题,是由于解决冲突的时候,把dev的代码带入到master1中了。

这个问题的大概原因是: gitlab必须把你解决冲突的提交先合并到源分支,这样这次的合并请求才没有冲突,才可以继续合并,而不需要开新的分支合并。

至于为什么我喜欢在gitlab上合并,因为有文件对比,我觉得这个很清晰,代码view也很不错,不过解决冲突这个,就不要在gitlab上了,这个是个坑,在本地解决冲突就不会出现这个问题。

你可能感兴趣的:(gitlab合并分支)