解決沖突 : AutoMatic merge failed;fix conflicts and then commit the result


沖突的類型

邏輯沖突

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
如果最終確定用b.c,那么解決辦法如下:
git rm a.c
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  把合並好的最新代碼推送到服務器端


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM