赞
踩
最近合并代码时发生了几次“不明确行为”,有时候发现自己的代码莫名的丢了,有时候发现合并后别人的代码静悄悄的丢了,
当local和remote中文件file1的line270内容不一样时会发生什么?
我们好像知道在进行合并时,如果local和remote都修改了同一个地方,那么会发生冲突,
是的,那么怎么判断两个分支的某一个地方都修改了呢?是需要一个参考分支的,在git中这个参考分支是两次提交的最通用的祖先节点,即base分支(可用git-merge-base local remote获取),
有了参考分支就可以进行three-way比较和合并了,想一想一些对比软件为什么提供了三路对比?我只需要对比两个文件啊!?
经过上述背景中场景的了解后,我们知道了git合并时需要三路对比的,即base、local、remote对比,根据不同的对比情况进行不同的处理:自动合并还是提示冲突,
我们带着这个问题来看,merge的结果是git会自动合并,因为相对于base来说,只有local分支修改了file1/line370的内容,自动合并的结果是“fine1/line370:这是小强干的”,
当然,如果base的内容是“fine1/line370:这是小强干的”,那么自动合并的结果会变成“fine1/line370:这是小度干的”,这是为什么?
在正常情况下这个自动合并规则没有问题,多个人开发,你开发你的功能,我开发我的功能,合并之后就是咱们的,不论是你先提交还是我先提交。
但是某种意外的情况就不一样了,出现的结果是local合并remote的代码,发现local自己的修改被覆盖掉了(local丢代码)!或者发现自己把remote的功能给“回退了”(remote丢代码)!
这种意外回事什么样的?直接分析,就是base分支出问题了,更直白点就是分支管理出现了混乱,导致了不明确行为:local丢代码或者remote丢代码。
那么出现这种现象后该怎么处理来保证local和remote各自开发的的代码都保留下来?
发生上述丢代码的场景了,那么怎么办?
此方案可读性及可控性高,实施起来效率高,并且自己心里踏实~,如果你想让自己心情愉快平稳一些,那么推荐此方案。
如果发生了代码丢失,但自己本次开发的代码量很小,则可以基于最新的分支checkout新的feature分支,将自己开发的代码再次在新的feature分支上CV修改一遍;
这个过程也可利用上述对比工具参考自己修改的内容进行CV。
tips:
checkout origin branch;git checkout origin/develop -b develop
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。