# git冲突解决
一、git pull 拉代码的时候,或者切换分支的时候,防止冲突和不便,,会用到git stash,将工作区内容暂存起来。
比如:为了fix 一个bug, 先stash, 使返回到自己上一个[commit](https://so.csdn.net/so/search?q=commit&spm=1001.2101.3001.7020), 改完bug之后再stash pop, 继续原来的工作。
怎么办:
1、git stash
备份当前工作区的内容,保存到git 栈中,从最近的一次commit中读取相关内容
2、git pull 或者做其他的工作
3、git stash pop
从git栈中获取到最近一次stash进去的内容,恢复工作区的内容。。获取之后,会删除栈中对应的stash。。
由于可能会stash多次,git使用栈管理,我们可以使用git stash list查看所有的stash
git stash list
显示git栈中的所有工作区内容的备份,
比如使用git stash apply stash@{1},就可以把版本号为stash@{1}的备份取出,不会删除对应的stash。。0为最新版本
git stash clear
清空git栈
还可以git reset --hard放弃本地修改,然后就可以git pull了。。但是不推荐使用gitreset --hard指令,实在是太危险啦!
二、但是git stash pop取出备份的时候也会出现冲突
比如,有个文件login.java,,你修改了一段代码,git stash保存以后,你从服务器上继续git pull了别人的代码,,
如果此时,别人的代码也修改了login.java。。。
此时当我们使用git stash pop 的时候,就会发生冲突,因为我们的修改不是基于最新的pull下来的文件的基础上。。所以git很难判断,
解决方法:
备份我们修改后的文件,,删除程序文件中我们所做的修改,重新pull,,然后在用我们备份好的文件替换掉,,再push上去即可。。
另一种就是上面说的git reset --hard了,,,,直接忽略本地的修改。。。但这样明显不太爽~
为什么我们需要它
不得不说,在知道这个命令的时,以及之后的使用中,我都超级热爱这个命令,因为它真的太好用了。
给大家说一下我使用这个命令的场景:
此时我在 feature_666 分支,非常聚精会神加持高专注地实现一个功能 666 模块,简直键盘如飞的编写代码~~~
然后这时,客户反馈出一个 bug , 非常严重,必须立马解决,优先级为 0 !!!
于是,我需要去到 release 分支去 checkout 新的分支去工作了,但是 666 功能还没完成怎么办?
此时我面临着一个选择题:
A:提交后切换,代码保存到分支 feature_666,却产生一个无意义的提交
B:不提交直接切换,然而这个选项根本没人会选。
是不是很难选,此时,别忘记还有 C 选项!
C:使用 git stash , 将当前修改(未提交的代码)存入缓存区,切换分支修改 bug ,回来再通过 git stash pop 取出来。
git冲突解决
于 2022-06-07 20:29:32 首次发布