1、产生原因
这种情况一般是由于,你在工作区修改了一些代码,但是还不打算提交,这时同步主干代码的时候,如果你修改的文件与主干分支的代码有冲突,那么拉取主干分支代码时就会报这个错误。
2、简单示例
下面我通过一个简单的例子给大家展示一下这个报错产生的前因后果。
首先主干分支有一个readme.txt文件,内容是my name is master
![](https://img-blog.csdnimg.cn/acba7239855645d39a20be8a21952010.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn6I2J5Y6f55qE5bCP54Gw54Gw,size_10,color_FFFFFF,t_70,g_se,x_16)
然后从主分支创建了一个分支A,在A分支添加了一个a.txt文件,并修改了readme.txt文件
![](https://img-blog.csdnimg.cn/aa5b2efef9cc46029e31bdc5f452dbc4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn6I2J5Y6f55qE5bCP54Gw54Gw,size_9,color_FFFFFF,t_70,g_se,x_16)
同时从主干分支创建了一个分支B,在B分支添加了一个b.txt文件,并修改了readme.txt文件
![](https://img-blog.csdnimg.cn/05c263ef82074e10aa7cf0cee60f461c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn6I2J5Y6f55qE5bCP54Gw54Gw,size_9,color_FFFFFF,t_70,g_se,x_16)
接下来呢,A分支提交了修改的文件并且合并到了主干分支。
然后B分支将b.txt文件提交并推送到了远程仓库,但此时还不想提交readme.txt文件。然后B分支想同步主干的代码,于是git pull origin master
此时就会报这个错误
![](https://img-blog.csdnimg.cn/ca7afa235c354028a42a3a2657451938.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn6I2J5Y6f55qE5bCP54Gw54Gw,size_13,color_FFFFFF,t_70,g_se,x_16)
3、解决方案
出现这个错误,一般有以下两种解决方法。
3.1、版本回退
如果我们不想保留本地的修改,直接使用git reset --hard命令进行回退。那么本地你未提交的修改就全部回退了,这个时候就可以成功同步主干代码了。
![](https://img-blog.csdnimg.cn/6054636907a7401f9b203d4a1728b5a4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn6I2J5Y6f55qE5bCP54Gw54Gw,size_12,color_FFFFFF,t_70,g_se,x_16)
3.2、备份本地文件
我们使用以下三个命令
git stash #备份工作区内容
git pull origin <branch> #拉取远程分支
git stash pop #恢复工作区内容
![](https://img-blog.csdnimg.cn/ea6d37ffaf23405d94d1c58a171ec709.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn6I2J5Y6f55qE5bCP54Gw54Gw,size_10,color_FFFFFF,t_70,g_se,x_16)
我们先使用git stash将工作区内容进行备份,然后就可以拉取主干分支代码,拉下来后再使用git stash pop命令恢复工作区内容。
这个时候会提示文件有冲突
![](https://img-blog.csdnimg.cn/8e2d8ebe1ad342108d064676b5cc48f1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn6I2J5Y6f55qE5bCP54Gw54Gw,size_9,color_FFFFFF,t_70,g_se,x_16)
我们根据需求手动去解决冲突就可以了。
删除特殊符号,留下我们需要的代码就OK了