樹沖突
文件名修改造成的沖突,稱為樹沖突。
比如,A同事把文件改名為A.C,B同事把同一個文件改名為B.C,那么B同事將這兩個commit合並時,會產生沖突。
如果最終確定用B同事的文件名,那么解決辦法如下:
git rm A.C
git rm origin-name.C
git add B.C
git commit
如果最終確定用A同事的文件名,那么解決辦法如下:
git rm B.C
git rm origin-name.C
git add A.C
git commit
內容沖突(git pull拉取最新代碼發現)
一般來講,出現沖突時都會有“CONFLICT”字樣,特別的直接報錯repo sync的報錯,可能並不是直接提示沖突
現在,需要進入報錯的項目(git庫)目錄,然后執行git rebase解決:
git rebase remote -branch-name
沖突解決的一般步驟
merge/patch的沖突解決
先編輯沖突,然后git commit提交。
對於git來講,編輯沖突跟平時的修改代碼沒什么差異。修改完成后,都是要把修改添加到緩存,然后commit。
rebase的沖突解決
rebase的沖突解決過程,就是解決每個應用補丁沖突的過程。
解決完一個補丁應用的沖突后,執行下面命令標記沖突已解決(也就是把修改內容加入緩存)
git add -u -u 表示把所有已track的文件的新的修改加入緩存,但不加入新的文件。
然后執行下面命令繼續rebase:
git rebase --continue
有沖突繼續解決,重復這這些步驟,直到rebase完成。
如果中間遇到某個補丁不需要應用,可以用下面命令忽略:
git rebase --skip
如果想回到rebase執行之前的狀態,可以執行:
git rebase --abort
注:rebase之后,不需要執行commit,也不存在新的修改需要提交,都是git自動完成。
直接編輯沖突文件:
沖突標記<<<<<<< (7個<)與=======之間的內容是我的修改
=======與>>>>>>>之間的內容是別人的修改
最簡單的編輯沖突的辦法,就是直接編輯沖突了的文件(test.txt),把沖突標記刪掉,把沖突解決正確。
此時,還沒有任何其它垃圾文件產生。
利用圖形界面工具解決沖突
如果要解決的沖突很多,且比較復雜,圖形界面的沖突解決工具就顯得很重要了。
執行git mergetool用預先配置的Beyond Compare解決沖突:
界面三個窗口依次是“LOCAL”、“BASE”、“REMOTE”,它們只是提供解決沖突需要的信息,是無法編輯的。
下面一個窗口是合並后的結果,可以手動修改,也可以點擊相應顏色的箭頭選擇“LOCAL”或者“REMOTE”。
在Beyond Compare中修改沖突保存后,沖突文件(test.txt)中的沖突標記就沒有了,成了修改后的內容,一個文件的沖突編輯就完成了。
注意:啟動Beyond Compare之后,會自動生成幾個包含大寫字母名稱、數字的輔助文件
關閉Beyond Compare時,這幾個輔助文件都會自動刪除,但同時會生成一個test.txt.orig的文件,內容是解決沖突前的沖突現場。