沖突的類型
邏輯沖突
git自動處理(合並/應用補丁)成功,但是邏輯上是有問題的。
比如另外一個人修改了文件名,但我還使用老的文件名,這種情況下自動處理是能成功的,但實際上是有問題的。
又比如,函數返回值含義變化,但我還使用老的含義,這種情況自動處理成功,但可能隱藏着重大BUG。
這種問題,主要通過自動化測試來保障。所以最好是能夠寫出比較完備的自動化測試用例。
這種沖突的解決,就是做一次BUG修正。不是真正解決git報告的沖突。
內容沖突
兩個用戶修改了同一個文件的同一塊區域,git會報告內容沖突。這種也比較常見.
樹沖突
文件名修改造成的沖突,稱為樹沖突。
比如,a用戶把文件改名為a.c,b用戶把同一個文件改名為b.c,那么b將這兩個commit合並時,會產生沖突。
$ git status
added by us: b.c
both deleted: origin-name.c
added by them: a.c
added by us: b.c
both deleted: origin-name.c
added by them: a.c
如果最終確定用b.c,那么解決辦法如下:
git rm a.c
git rm origin-name.c
git add b.c
git commit
git rm origin-name.c
git add b.c
git commit
執行前面兩個git rm時,會告警“file-name : needs merge”,可以不必理會。
樹沖突也可以用git mergetool來解決,但整個解決過程是在交互式問答中完成的,用d 刪除不要的文件,用c保留需要的文件。
最后執行git commit提交即可。
問題:
CONFLICT(content):Merge conflict in XXXX/.DS_Store.
AutoMatic merge failed;fix conflicts and then commit the result.
沖突內容:合並沖突在 XXXX.DS_Store文件中
自動合並失敗;修改沖突然后提交修改后的結果。
<<<<<<<< HEAD
你寫的代碼
===============
別人寫的代碼
>>>>>>>>>>>>>>> e4tghhhqd128dqwenasjdqasddcvbdgffg
解決:
首先先分析兩個人的代碼是實現相同功能而寫的重復的代碼,
還是各自實現的不同的功能的代碼。
如果是重復代碼:兩個二選一刪除一個,然后再把這些沖突標示符刪除即可;
如果不是重復代碼,兩個都需要保留,只把沖突符號(紅色部分)刪除即可。
是自己的就保留自己的代碼,
是別人的就保留別人的代碼.
編譯通過之后重新提交:
修改完成后:
1 git add . 將文件添加到暫存區
2 git commit -m “例如 完成了xxx功能的開發 (提交到本地倉庫)"
3 git checkout xxx 切換到所開發的分支
4 git pull origin xxx 把服務器代碼拉下和本地代碼合並
( 注意先拉取在合並, 避免代碼沖突 )
5 git merge xxx 合並自己的任務分支
6 git push origin xxx 把合並好的最新代碼推送到服務器端
