03 04 2018

Git冲突,pull内容与本地已经有的内容冲突

$ git pull origin master 
Username for 'https://git.oschina.net': xxx 
From https://git.oschina.net/xxx/gittest 
* branch master -> FETCH_HEAD 
error: Your local changes to the following files would be overwritten by merge: fff.txt 
Please commit your changes or stash them before you merge. 
Aborting 
Updating 5581e8f..b9123fc

问题解决思路

上面pull 拉下来的东西跟我们本地的内容是有了冲突了,这个时候我们要先暂存,再pull,再恢复暂存的内容,恢复后会把pull下来和本地的同时存在,然后我们自己手动去解决冲突就好了。手动解决完了冲突再正常add,commit,push到远程端就好了。

下面开始解决冲突


1.把本地已有的内容单独压入栈

我们先暂存,用stash命令暂存,注意这个stash和add到的暂存不是同一概念。git stash将会把当前目录和index中的所有改动(但不包括未track的文件)压入一个栈,然后留给你一个clean的工作状态,即处于上一次最新提交处。所以我们执行了stash后才能正常pull,然后恢复stash的栈里的内容,手动解决冲突,再add,commit,最后push。 
执行git stash 
这里写图片描述

执行暂存后 
用 git stash list 查看暂存的 stash@{0}就是我们刚刚暂存的内容句柄。 
这里写图片描述


2.pull远程端内容

执行完内容的压栈,正常去pull。我把用户名打了马赛克 
这里写图片描述


3.恢复压入栈暂存的本地内容

接着去恢复刚刚压入栈的内容 
git stash pop stash@{0},注意这里stash@{0}就是入栈的那个句柄。 
这里写图片描述


4.恢复后,手动解决冲突

打开冲突文件中,冲突内容 
<<<<<<< Updated upstream 
fsefsef

============

1111111111

<<<<<<< Stashed upstream 
============横杠上面是pull下来的,横杠下面是本地已经有的内容,这个时候要自己手动来解决冲突,看自己要保留那一部分。


解决了上面的冲突后,重新add 到暂存区,再commit,再push到远程端就可以了。

发表评论