Android studio 抛 Git Pull Failed Your local changes would be overwritten by merge.的解决办法

Posted 打杂人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android studio 抛 Git Pull Failed Your local changes would be overwritten by merge.的解决办法相关的知识,希望对你有一定的参考价值。

如题 : 
android studio 远程Pull 时, 抛

2020/5/29
9:25    ADB rejected shell command (mkdir -p /data/local/tmp/perfd): closed

9:31    Git Pull Failed
        Your local changes would be overwritten by merge.
        Commit, stash or revert them to proceed. View them

Push 抛 

9:36    Push rejected
        Push to origin/develop was rejected


遇到冲突的一般在git pull这一步,提醒你有冲突。

在代码合并之后需要注意的是:

并不是直接git push,而是先git commit -am"日志然后再git push,

不然会提示git push失败,还可能遇到其他各种奇葩问题

所以完整顺序是:

git add .

git commit -am"日志"

git pull

代码冲突

代码合并

git commit -am"日志"

git push

解决方法:

①如果你想保留刚自己写的没有提交push的本地修改的代码,并把git服务器上的代码pull到本地(本地刚才修改的代码将会被暂时封存起来):

git stash
git pull origin master
git stash pop


②如果你想完全地覆盖本地的代码,只保留服务器端代码,则直接回退到上一个版本,再进行pull:

git reset --hard
git pull origin master  (其中origin master表示git的主分支)

(3) 硬覆盖:放弃本地修改,直接用git上的代码覆盖本地代码:此方法慎用

git reset --hard

git pull


Android Studio自带了解决冲突的工具,以下是操作步骤

选中项目->右键->Git->Resolve Conflicts

 

会出现一个弹窗,显示了冲突的文件,选择某个文件后,点击Merge

 

 

 

会出现三个代码框

 

 

 

 
  1. a、左边的Local Changes代表”当前“分支上的修改;

  2. b、右边的Changes from Server代表“合并进来”的分支上的修改;

  3. c、中间的Result代表经过处理后的最终内容;

  • 1
  • 2
  • 3
  • 4

左上角有一排按钮,分别介绍一下作用

 

 

  • 上下箭头:跳转到上(下)一个不同;

这三个从左往右依次代表:比较左边和中间的内容,比较中间和右边的内容,比较左边和右边内容;

 

这三个从左往右依次代表:接受两边没有冲突的改变,接受左边没有冲突的改变,接受右边没有冲突的改变,什么叫没有冲突的改变待会儿会解释;

  • 现在回头看内容区域,会看到四种颜色 
    • 红色区域:代表当前分支和合并分支都编辑过的内容,属于冲突;
    • 蓝色区域:代表被单方面编辑过的内容,属于改变;
    • 灰色区域:代表被删除的内容,属于改变;
    • 绿色区域:代表新增的内容,属于改变;
  • 通过之前所述我们可以知道,真正需要解决的冲突只有红色区域,其他高亮区域只是为了让我们再次确认改变的内容是否合理,如果对自己的代码有信心,那就不用管那些区域了,c步骤中的三个按钮就派上用场了,你可以按照自己的需求接受改变的代码,通常可以直接接受两边没有冲突的改变:

 

 

 

  • 接受后就变成上图了,现在我们需要解决冲突了,如果不记得自己的修改是什么,就可以关闭该工具,通过查找历史提交,比对历史代码来确认正确的代码;有的时候由于代码格式化的原因,你并没有改变代码的内容,但是格式化增加了一些空格,那么也会产生冲突。

以下是不用工具的情况

 

执行git merge ,如果有冲突,就会出现如下格式:

<<<<<<< HEAD

这个位置的内容就是当前所在分支的内容

=======

这个位置的内容就是合并进来的分支的内容

>>>>>>> branchName
  1.  

用下面的设置来改进冲突标记使其也显示(分支)共同祖先(感谢罗宾·斯托克和休·吉登斯): 
git config --global merge.conflictstyle diff3

设置显示共同祖先之前: 

设置了显示共同祖先之后:

||||||| merged common ancestors下面的内容就是双方改动前的内容.
此部分内容来源: http://blog.csdn.net/jaden_hool/article/details/51852196

以上是关于Android studio 抛 Git Pull Failed Your local changes would be overwritten by merge.的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

Git系列:Android studio上update projectpullfetch的区别

Android Studio 之Gitee插件基本使用---多人开发---十分钟学会安卓开发GIT

Visual Studio团队资源管理器 Git 源码管理工具简单入门

android studio build 突然抛出很多错误

调用函数时模拟器抛出异常(android studio)

android studio怎么解除git