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