场景:
- 初始基于项目A的版本v1.0.0定制化开发了一个项目B; 变成了项目B的v1版本
一段时间后,要求将项目A的v3.0.0 合并与定制化项目B的v1版本进行代码合并,升级系统
项目状况
- git master 主分支
git develop 开发分支
行动
- 基于项目B 的develop 拓展出developV3 将项目A的v3.0.0 commit到developV3 进行push
再返回develop分支上 输入 git merge developV3
本来以为万事大吉 但是运行起来后发现develop上的内容已经完全被developV3 进行了覆盖,全部变成项目A的v3.0.0版本代码
解决方法
- 遇到问题,当然要询问度娘了,
首先要保证当前分支只有 原来的 master 和develop分支
因为我个人怕出错, 所以我基于develop又拓展出来一个分支dev
dev 上 的代码变更为项目A的版本v1.0.0
再基于dev拓展出devMerge 代码为 项目A的v3.0.0;
这个时候,将dev上的代码升级为项目B的v1版本;
然后在dev分支上 输入 git merge devMerge
可以看到代码已经实现了合并, 但是会有冲突, 这个时候需要自己手动解决
最后合并完冲突后, 可以切换到develop分支上,将本地代码手动替换成dev上已合并好的代码(关于这步操作,稍后会在第5块做解释),
直接commit并push后,就会发现develop分支上,已经是合并后的代码了,大功告成
多余的dev和devMerge就可以删掉了
回答上面的问题, 为什么要手动进行替换
- 实践出真理
本来我是尝试将在develop分支上合并dev的, 但是发现有冲突,需要merge,相当于把我在dev分支上合并devMerge分支上的操作再做一遍, 我就觉得比较麻烦
后来我就考虑重命名的问题, 将dev重命名为develop,develop换成developV1 ,(重命名的操作,可以看这里哦https://www.jianshu.com/p/d8b71d8a95f0)
但是又出现了问题,查看log, 只有项目A的v1.0.0和最新全部合并后的代码 , 没有项目B以前一期开发log记录,这样,如果想回退或者想打版本的话,就找不到原来的开发记录了
所以想出来了手动替换,在原来的开发记录上,直接提交合并后的代码,方便溯源