在使用协同开发难免会出现同时修改某个文件导致代码冲突的问题
* branch master -> FETCH_HEAD
error: Your local changes to the following files would be overwritten by merge:
lib/pages/search_page.dart
Please commit your changes or stash them before you merge.
Aborting
Updating 657e136..4f8135c
一、使用 stash 缓存修改
最简单的就是使用git stash
将自己修改的代码片段进行一个本地仓库的临时缓存
$ git stash
Saved working directory and index state WIP on master: 657e136 search page modif ied
使用git stash list
查看缓存代码片段
$ git stash list
stash@{0}: WIP on master: 657e136 search page modified
使用了git stash
命令将改动的代码缓存后,就可以执行pull 将远程仓库更新到本地了,
现在使用pull
更新代码
$ git pull origin master
现在更新没问题了
再将我们自己修改的代码合并到更新后的代码中去
$ git stash pop stash@{0}
Auto-merging lib/pages/search_page.dart
CONFLICT (content): Merge conflict in lib/pages/search_page.dart
其中stash@{0}
就是git stash时的一个标记,也可使用git stash save XXX
来定义一个自己标记,方便自己查询管理
现在回到自己写的代码中去,你会发现
很明显git 帮你将远程的和本地的分开标记出来了,现在我们只需要将自己修改过的地方合并到Updated upstream中去再 commit 就ok
其实stash 有点类似这个情景(我们平时写代码,有个同事说哎XX 我提交了一个代码是否你也修改了 XX方法?也是你意识到了直接更新定会出现冲突,咋办! 我们就像将自己修改的文件先拷贝一份呗,然后在将同事提交的代码更新下来,然后再将自己改过的方法合并进去,再提交)。
二、直接还原
有时候我们本地并没有修改多少,使用直接还原也许更省事,
先使用git log
查询一下提交记录
$ git log
commit 4f8135c32d508d250b83fe12644c4b65db87a1af (HEAD -> master, origin/master)
Author: dex <601078218@qq.com>
Date: Thu Nov 7 22:19:04 2019 +0800
the tab_navigator.dart is modified
## ... 省略其他log
直接拷贝 commit版本后的hash码
$ git reset --hard 4f8135c32d508d250b83fe12644c4b65db87a1af
HEAD is now at 4f8135c the tab_navigator.dart is modified
ok 代码已经还原到上一次提交状态,但是这个需要谨慎使用,执行还原后你修改的代码将不复存在!