一、问题描述:
两个分支上都有某段代码,但是在gitLab上merge时,却有这段代码的change出现
二、容易出现此问题的场景:
线上分支master上有紧急bug需要改,于是基于master拉了个新分支去改,改好后,想把这部分代码同步到dev和test上去,但是此时dev由于有正在联调中的代码,不能直接和test,于是直接将新分支的代码分别合入dev和test,后面一切走入正轨后,dev合到test,于是发现多了不该有的change
三、复现步骤:
1.从master分支切个新分支A
2.A分支里随便修改个啥,自己开心就好
3.在gitlab上,提A=>dev分支的merge并合并(dev分支上有提测的代码)
4.在gitlab上,提A=>test分支的merge并合并(test分支上有提测的代码,合过之后,两分支代码应该相同)
5.在gitlab上,提dev=>test分支的merge,查看change,发现多了很多change,但是其实,这些change两个分支都存在
四、问题出现原因剖析
gitLab上,不能一对多,只能多对一,否则容易出现版本错乱问题,下面我们来验证下这个问题,复现的步骤,就不重复了,直接用命令来验证
1.对比dev分支和test分支,比较dev分支上有而test分支上没有的内容
git log dev ^test
执行以上命令后,结果如下,发现果然版本出现了问题
2.对比test分支和dev分支,比较test分支上有而dev分支上没有的内容
git log test ^dev
执行以上命令后,结果如下,依旧版本问题