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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章