背景
最近在将自己的temp分支准备合并到develop分支时,出现了Already up-to-date.提示,当时的想法,明明2个分支的HEAD的内容不一样,为什么会有这个错误提示呢?甚至一度怀疑git是否出问题了,此时也翻看了其他人遇到类似错误的提示的处理方法,没说说原因,直接一堆命令就说可以了,实在摸不着头脑。
静心梳理过程
1,目前状况,共有3个分支,1个是master,1个是develop,1个是临时建立的自己的分支temp,其中master是上线用的分支,develop是开发用的分支,正常的节奏是每周都会把功能在develop测试后合并到master进行上线。整体都是通过父子模块的形式进行开发。
2,我为什么建立这个临时分支呢?最近我有几个task是几乎并行进行的,其中一个确定本周开发测试完会进行上线,另外一个任务较大,预计会下周上线但是本周需要开发一部分;根据本周总的任务安排,预计会只有我自己修改这个模块进行上线。基于以上认知,三下五除二,我就把任务一给做完给提交测试,测试很给力,很快测试通过可以上线,于是我就把develop代码合并到了master上;然后这边进行下一个task 的开发,经过一两天的开发,第二个任务也基本没啥问题了,当然本地也是都执行过commit了(不过这其中包含有对本周第一个task的重要细节优化),只是没提交到远程。一切的一切看起来都是那么的OK,突然产品那边发出一个需求说要把上周做的一个功能做个小的调整后跟随这周版本上线。请问此时的你怎们处理呢?我也有了自己现在想想不太好的做法。
3,于是我首先把本地的develop给做到checkout新的临时分支temp,并继续修改develop分支,即删掉和task2有关的代码保留task1的优化代码,并添加了新需求的代码,等一切都OK了,提交commit到远程,进行测试task1的回归+新需求的调整测试,一切都很顺利,测试完成合并到master,这就是这周要上线的功能了,真不少。
4,新的一周开始了,继续第二task的开发,心想既然已经有了temp分支,那就在temp上把task2的分支都开发完吧,于是在temp上完成了task2的所有开发,准备合并到develop提交测试,执行合并,确实有合并动作都是提示只有最新的在temp上的一些改动被合并了。前面的task2的开发的功能怎么合并不过来呢?于是再次执行merge,后 面就只是提示Already up-to-date了,这可是真有点让人崩溃的感觉。
原因出在了哪里
百思不得其解,想想我对Git可谓精通,这不是笑话嘛,读者朋友此时你能知道什么原因吗?被这个问题已经困扰了大半天,本来土办法也是有的,就是在develop上直接照着temp分支再写一遍就可以了,既然已经无法后退那么我就继续前进,但是找不到原因是很让人担心,万一后面再出现这种类似情况怎么办。
揭秘原因
其实算不上揭秘了,如果对Git的原理比较清楚,再加上前面的过程梳理,其实原因已经一目了然了。具体如下:
1,我本来在develop提交了commit1,之后在temp照着develop当时的状态开了分支,也就是其实temp分支也是有这同一个commit1的。
2,紧接着,我在develop进行代码删除和新代码添加,并提交新的commit2,此时的commit2已经前进了。
3,后来我在temp上继续task2的开发,并提交新的commit3,此时commit3继续前进了。
4,当我执行将的temp分支合并到develop的时候,其实develop缺少的至少temp上的commit3的执行动作,自然也只会合并commit3了。
其实,说的直白些,就是我自己给我自己在前面挖了一个坑,我要往里面跳,还一直想为什么会有这个坑。
解决方法
上文提到的土方法,怎么挖的坑,怎么填上就OK了。当然,也可以借助外面的compare软件快速把代码弄到develop上去,但道理都是一样的。
最后一个问题
如果要执行将develop分支合并到temp分支,temp分支会有哪些变化呢?答案在留言中揭晓
来源:CSDN
作者:FeelTouch
链接:https://blog.csdn.net/FENGQIYUNRAN/article/details/104734346