git中解决冲突conflict

责编:menVScode 2018-03-27 14:01 阅读(477)

冲突的产生

很多命令都可能出现冲突,但从根本上来讲,都是merge 和 patch(应用补丁)时产生冲突。而rebase就是重新设置基准,然后应用补丁的过程,所以也会冲突。

执行git pull命令会自动merge,repo sync会自动rebase,所以git pull和repo sync也会产生冲突。当然git rebase就更不用说了。

冲突的类型

逻辑冲突

git自动处理(合并/应用补丁)成功,但是逻辑上是有问题的。

比如另外一个人修改了文件名,但我还使用老的文件名,这种情况下自动处理是能成功的,但实际上是有问题的。

又比如,函数返回值含义变化,但我还使用老的含义,这种情况自动处理成功,但可能隐藏着重大BUG。这种问题,主要通过自动化测试来保障。所以最好是能够写出比较完备的自动化测试用例。

这种冲突的解决,就是做一次BUG修正。不是真正解决git报告的冲突。

内容冲突

两个用户修改了同一个文件的同一块区域,git会报告内容冲突。我们常见的都是这种,后面的解决办法也主要针对这种冲突。


【1】当工作区域版本与服务器的版本不一致,push本地的commit,发现无法push。

QQ截图20180327140819

【3】发现需要先 git pull,于是先更新。

1111111

pull后,给出了明确的错误提示“Automatic merge failed; fix conflicts and then commit the result.”,并且指出发生冲突的文件目录。

【4】查看冲突的文件:


其中<<<<<<< HEAD 到 ======= 中间的内容是local提交的。======= 到 >>>>>>> commit-id 是远程仓库中的内容。

然后我们删除这些注释,保证所修改的文件是最终push版本的内容。

注:在eclipse中即使是解决了冲突,文件的冲突图标还在,但并不影响commit&push。

【5】冲突解决后,在git status可以看到当前的文件状态:

注意,特别需要注意的是当前分支会处在一个MERGING状态下,以及刚才处理的冲突文件test.txt处于Unmerged paths下。

5555555555555555555

【6】根据提示,用git add 文件名,然后在git commit和git push。

999999999999999999

QQ截图20180327142448

标签: conflict git
前端交流群: MVC前端网(menvscode.com)-qq交流群:551903636

邮箱快速注册

忘记密码