我们在使用git的时候,经常会遇到冲突的情况,那应该如何解决冲突呢?
首先看一下git的原理图。
从这张图可以很清楚的看到本地分支和远程分支的区别,当我们进行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就不知道究竟采用你的呢,还是张三的呢?