当我们使用git pull指令从远程服务器拉取最新版本的代码时,常常很容易和本地的版本的代码出现冲突,例如出现这样的提示:
这种情况是出现在你修改了本地代码,修改的代码和远程分支的代码出现冲突且修改的代码没有commit到本地分支时,此时,远程分支的代码无法和本地分支代码进行合并,是因为还有些修改的代码在工作树上没有同步到本地分支。Git在提示中,提供两种解决方式,第一种是先将工作树的修改提交本地分支,第二种是先把改动暂存脏工作树,这个解决方案,分别适合对应的两种场景。
1、当前你的改动,只是对于一些小bug的修改,对主流程改动不大,你可以直接将工作树的中修改提交到本地分支,再pull远程分支的代码
$ git add .
$ git commit -a -m "备注"
$ git pull <branch>
此时会提示无法自动合并,因为存在冲突
注意图中红色框中,当前的分支多一个状态正在Merging,要结束这个状态,需要你手动处理冲突并提交到本地分支。
如何手动处理冲突?
打开提示存在无法自动合并的冲突文件你会看到
你可以手动选择是保留本地修改还是引用远程分支的最新版本代码,或者其他骚操作。
修改完文件后,你需要将修改后的代码提交在本地分支,这样才算真正完成处理冲突成功合并代码。
完成以上操作后,分支就会恢复正常状态。
2、第二种场景是你正在进行新版本的开发,此时需要你修改线上一个bug,此时第一种方法就不能用了。这时,你可以使用git stash指令将你新版的未开发完整的代码现在保存到脏工作树,工作树恢复到上一个提示本地分支状态,此时你就可以pull远程分支的代码进行bug修改,修改完bug后,再将的未开发完的代码从脏工作树取出继续开发。具体指令操作如下
$ git stash
$ git pull
# 改bug
# git stash pop <stash> #可能在脏工作树里在多个记录
这里有两个点要注意的:
1、当你重新从脏工作树中,取出记录时,也会出现冲突的情况,解决方法和pull类似
2、在脏工作树中可能会存在多个记录,所以恢复记录记得不要恢复错了
使用git stash list就可以查看当前脏工作区也有缓存记录
{}里中就是对应脏工作区中的记录对应名字,可以通过git stash pop <stash>对应选择恢复某个记录
图中的情况就是恢复数据后出现冲突,当前分支的状态变成MERGING和pull出现冲突的情况一致,需要要手动解决冲突,commit后才会恢复正常状态。
你在恢复之前也可以通过git stash show -p <stash>查看对应和本地分支的区别
注意:脏工作区中的数据取出,记录还是存在的,需要手动删除
$ git stash clear
本章的内容到这里就完了!!