如題 :
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
會出現三個代碼框
-
a、左邊的Local Changes代表”當前“分支上的修改;
-
b、右邊的Changes from Server代表“合並進來”的分支上的修改;
-
c、中間的Result代表經過處理後的最終內容;
- 1
- 2
- 3
- 4
左上角有一排按鈕,分別介紹一下作用
- 上下箭頭:跳轉到上(下)一個不同;
這三個從左往右依次代表:比較左邊和中間的內容,比較中間和右邊的內容,比較左邊和右邊內容;
這三個從左往右依次代表:接受兩邊沒有衝突的改變,接受左邊沒有衝突的改變,接受右邊沒有衝突的改變,什麼叫沒有衝突的改變待會兒會解釋;
- 現在回頭看內容區域,會看到四種顏色
- 紅色區域:代表當前分支和合並分支都編輯過的內容,屬於衝突;
- 藍色區域:代表被單方面編輯過的內容,屬於改變;
- 灰色區域:代表被刪除的內容,屬於改變;
- 綠色區域:代表新增的內容,屬於改變;
- 通過之前所述我們可以知道,真正需要解決的衝突只有紅色區域,其他高亮區域只是爲了讓我們再次確認改變的內容是否合理,如果對自己的代碼有信心,那就不用管那些區域了,c步驟中的三個按鈕就派上用場了,你可以按照自己的需求接受改變的代碼,通常可以直接接受兩邊沒有衝突的改變:
- 接受後就變成上圖了,現在我們需要解決衝突了,如果不記得自己的修改是什麼,就可以關閉該工具,通過查找歷史提交,比對歷史代碼來確認正確的代碼;有的時候由於代碼格式化的原因,你並沒有改變代碼的內容,但是格式化增加了一些空格,那麼也會產生衝突。
以下是不用工具的情況
執行git merge ,如果有衝突,就會出現如下格式:
<<<<<<< HEAD
這個位置的內容就是當前所在分支的內容
=======
這個位置的內容就是合並進來的分支的內容
>>>>>>> branchName
用下面的設置來改進衝突標記使其也顯示(分支)共同祖先(感謝羅賓·斯托克和休·吉登斯): git config --global merge.conflictstyle diff3
設置顯示共同祖先之前:
設置了顯示共同祖先之後:
||||||| merged common ancestors下面的內容就是雙方改動前的內容.
此部分內容來源: http://blog.csdn.net/jaden_hool/article/details/51852196