1. 冲突的发生
假设现在有两个分支A,B(对应于同一远程分支),目前两个分支内容都与远程分支一致。此时,在A分支test进行更改并提交push远程分支,B分支上也对test文件进行更改(注意,更改前没有从远程分支pull),更改完毕后,执行git pull操作就会发生冲突。
2. 解决冲突
依据B分支的更改是否commit提交至本地仓库,有下面两种方法解决冲突。
2.1 更改未提交至本地仓库
这种情况下直接执行git pull会出现如下的提示信息:
我们可以使用git stash 命令将本地的更改暂存,执行git stash list查看暂存的本地更改:
这时就可以执行git pull从远程拉取更新,然后还原暂存内容(git stash pop stash@{0}:这个过程会自动合并远程更新与本地暂存),会得到如下提示消息:
说明自动合并失败,需解决其中的冲突,查看冲突文件内容如下:
其中edit3为远程pull的内容,edit4为本地暂存的内容,选择需要保存的内容,随后提交至本地仓库。(ref:http://www.01happy.com/git-resolve-conflicts/)
2.2 更改提交至本地仓库
(1)对于这种情况,执行git pull会自动执行合并,发生冲突有如下提示信息:
查看冲突文件内容如下:
其中edit2为本地更改内容,new为远程娥分支内容,手动更改冲突文件内容后提交至本地仓库即可。
(2)解决此类冲突还有一个方法。因为冲突是由于git pull拉取远程内容导致,那本地只需将分支更改为执行git pull命令之前的状态即可,执行git rest --merge,可将自动合并冲突的文件内容更改为执行git pull命令之前的状态。(ref:https://blog.youkuaiyun.com/wenwenxiong/article/details/47813277)