在使用协同开发难免会出现同时修改某个文件导致代码冲突的问题


	 * 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 代码已经还原到上一次提交状态,但是这个需要谨慎使用,执行还原后你修改的代码将不复存在!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐