问题原因
本地写代码过程中,远端一直在更新,push代码前夕需要先pull一遍才能保证版本相同不影响push,但是由于冲突导致pull失败。
此处缺图片后续补充,反正就是失败了。
提示类似如下:
error:Your local changes to the following files would be overwritten by merge……
具体提示省略。
此时就需要进行代码的合并和冲突处理。
我司仅操作本地与master分支,此下所有内容,都在该基础上解释,目前我并不能深刻理解多分支操作,请勿将以下内容套用到多分支情况。
解决方案
先把本地所有修改提交!
一定要先提交,不然恢复的时候就不好解决了,代码全都修改完成了在执行这些操作
提交完成后在执行如下操作。
#暂存本地修改
git stash
#拉取远端代码
git pull origin master
#合并远端新拉取的与本地暂存文件
git stash pop
此时手动解决冲突即可,解决完就能正常提交然后push代码了。
具体内容详解
1.首先暂存目前的修改。
以下两条命令,选其中一个即可。
#无备注,直接使用
git stash
#或者备注暂存信息
git stash save "这是一个描述"
个人理解:
暂存功能实际上可以理解为,将本地的所有文件全都复制到了.git那个隐藏文件夹中,暂存了一个版本。
然后本地的目录下边的内容,全部恢复成了上次拉取的版本。
这样pull就不受限制了,因为没有冲突,属于实时更新。
扩展:
常用的git stash命令如下:
-
git stash save “save message”
执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。 -
git stash list
查看stash了哪些存储 -
git stash show
显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1} -
git stash show -p
显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p -
git stash apply
应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1} -
git stash pop
命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1} -
git stash drop stash@{KaTeX parse error: Expected 'EOF', got '}' at position 4: num}̲ 丢弃stash@{num}存储,从列表中删除这个存储
-
git stash clear
删除所有缓存的stash
2.拉取并合并代码
#拉取远端代码
git pull origin master
#合并远端新拉取的与本地暂存文件
git stash pop
暂存之后就能正常拉取代码了。
根据stash中的解释,pop可能并不是合并功能,我不确定,但是我的理解是这样的,他也确实有了此类操作。
在个人理解中,pop实际上是将暂存起来的文件,无冲突的文件add到了本地目录,有冲突的文件在本地通过标注的方式,将冲突两方的内容都写入了同一文件。
3.如何解决冲突
个人选择的方法为NetBeans 菜单栏-团队协作-解决冲突。
点开后按照图形界面进行操作即可。也可以用vim直接在git上进行编辑,由于我这里可以进行图形化,所以没有进行该操作,可自行百度。
4.删除暂存
如无必要,别删哦,一切等确定OK,push成功了再清。
如果删除了当天也可以找到办法恢复。
#git stash drop [stash]
#清除特定暂存
git stash drop stash@{0}
#清除所有暂存
git stash clear
暂存序号是栈的形式,每进来一个新的暂存,新的置为0,其他的序号都+1.
其他
中间遇到了一个warning: LF will be replaced by CRLF in XXXXX的问题,百度了一番是回车和换行区别的干系,此处采用了如下方法:
git config --global core.autocrlf true
具体可参考大佬写的:https://www.jianshu.com/p/450cd21b36a4
讲解非常详细,由于我司好像还有人用mac,所以没有直接选哪个纯windows的操作,我比较怕影响到别人。
参考
- git stash 用法总结和注意点
https://www.cnblogs.com/zndxall/p/9586088.html - 关于git提示“warning: LF will be replaced by CRLF”终极解答
https://www.jianshu.com/p/450cd21b36a4 - 我对象的讲解