git冲突解决方案
我们在使用git的时候,经常会遇到冲突的情况,那应该如何解决冲突呢?
首先看一下git的原理图。
252300399818396.png
从这张图可以很清楚的看到本地分支和远程分支的区别,当我们进行commit操作的时候,事实上只是提交到本地的git分支上;而只有进行了push后,才是提交到远程的git分支上。
下面以index.html文件为例,如果你跟同事张三都修改了这个文件,就有如下两种场景。
场景1
你在本地修改了index.html,但还没commit,这时张三喊你更新代码。
此时你pull的话,代码无法更新下来,会有如下提示:
error: Your local changes to 'index.html' would be overwritten by merge. Aborting.
Please, commit your changes or stash them before you can merge.
解决方案:
先备份本地index.html,然后可以先revert,然后再运行pull,此时代码就可以正常拉取了。
然后再通过diff比较两份代码不一致的地方,修改后再次commit代码即可。
场景2
你本地修改了index.html,而且已经commit了,这时张三喊你更新代码。
此时你push的话就会提示冲突,因为张三的版本已经先于你提交了,你们对同一个文件进行了操作,此时git就不知道究竟采用你的呢,还是张三的呢?
打开冲突的文件,代码里会出现<<<HEAD这样的符号,标明冲突的代码位置。
2.png
解决方案
选择冲突的那个文件,鼠标右键菜单选择”Edit conficts”:
mark.png
如图,界面分了两栏做对比,左边是Theirs,右边是mine,我们需要选择一种合并代码的方式,合并一般分为4种情况:
1、保留”我的修改”,舍弃”别人的修改”。
鼠标右键点击Mine框的相应行,点击”Use this text block”。
2、舍弃”我的修改”,保留”别人的修改”。
鼠标右键点击Theirs框的相应行,点击”Use this text block”。
3、同时保留”我的修改”和”别人的修改”,并将”我的修改” 放在前面。
鼠标右键点击Mine框的相应行,点击”Use text block from mine before theirs”。
4、同时保留”我的修改”和”别人的修改”,并将”别人的修改”放在前面。
鼠标右键点击Mine框的相应行,点击”Use text block from theirs before mine”。
选择完后,会在下面区域显示处理冲突后的结果。
处理完成后,点击小乌龟菜单上的Mark as resolved选项卡;或者先保存文件,然后鼠标右键选择Resolved,此时就会标记冲突已解决,文件上的黄色感叹号会消失,系统会自动删除因冲突而新建的文件,接下来再正常进行commit和push操作就ok了。