提交代码后,推送代码有冲突,pull远端代码,因有冲突,导致失败的解决方案

问题原因

本地写代码过程中,远端一直在更新,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上进行编辑,由于我这里可以进行图形化,所以没有进行该操作,可自行百度。提交代码后,推送代码有冲突,pull远端代码,因有冲突,导致失败的解决方案_第1张图片

4.删除暂存

如无必要,别删哦,一切等确定OK,push成功了再清。
如果删除了当天也可以找到办法恢复。

#git stash drop [stash]
#清除特定暂存
git stash drop stash@{0}
#清除所有暂存
git stash clear 

提交代码后,推送代码有冲突,pull远端代码,因有冲突,导致失败的解决方案_第2张图片

暂存序号是栈的形式,每进来一个新的暂存,新的置为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的操作,我比较怕影响到别人。

参考

  1. git stash 用法总结和注意点
    https://www.cnblogs.com/zndxall/p/9586088.html
  2. 关于git提示“warning: LF will be replaced by CRLF”终极解答
    https://www.jianshu.com/p/450cd21b36a4
  3. 我对象的讲解

你可能感兴趣的:(遇到问题的解答,git,github)