如何解決Git代碼合并沖突

1.GIt代碼合并沖突

1.沖突產(chǎn)生的原因

兩個(gè)分支,同時(shí)修改了某一行代碼,導(dǎo)致合并失敗

分支 代碼結(jié)構(gòu) 說(shuō)明
master String name = "zhangsan"; 修改前,此版本master、dev一致
master String name = "zhangsan-master"; 主干代碼,通過(guò)別的分支合并過(guò)
dev String name = "zhangsan-dev"; 開(kāi)發(fā)分支,修改相同行的代碼

2.如何解決合并沖突

1.代碼合并

git merge master # 通過(guò)此命令,合并master代碼到dev分支

2.查找到?jīng)_突的文件

  • 方式一:執(zhí)行上面的合并命令后,會(huì)出現(xiàn)如下錯(cuò)誤20d:
CONFLICT (content): Merge conflict in src/main/java/com/ttshixi/git/merge/MergeConflict.java
Automatic merge failed; fix conflicts and then commit the result. ## Automatic merge failed 即提示自動(dòng)合并失敗。
  • 方式二: 使用git命令查找
git ls-files -u  | cut -f 2 | sort -u
## 上面的命令由三部分組成:
## 1.git ls-fiels -u 查找未合并的文件。-u 參數(shù)代表顯示未合并的文件;
## 2.cut -f 2 不是git命令,是linux系統(tǒng)命令,指的是顯示list文件的第二列,默認(rèn)分隔符為 TAB;
## 3.sort -u  不是git命令,是linux系統(tǒng)命令,指的是將文件排序,并去重
  • 方式三:使用其他git工具(smart git)

    smartGit查看沖突文件

3.處理沖突文件

1.沖突文件示例

<<<<<<< HEAD    ## 沖突文件中,<<<<<<< HEAD 代表接下來(lái)的代碼,是本地分支代碼
        String name = "zhangsan-dev";       ## 具體的本地分支代碼
=======                                     ## 沖突的本地代碼結(jié)束
        String name = "zhangsan-master";    ## 代表其他分支的代碼
>>>>>>> master                              ## 代表分支為master

上面的代碼即表示:代碼出現(xiàn)了沖突,并且本地代碼為 String name = "zhangsan-dev"; master分支的代碼是String name = "zhangsan-master"; 需要解決代碼沖突。

2.解決方式

  1. 確定保留那部分代碼:

    1. 一般原則是,以master代碼為主,先進(jìn)行合并。合并后再提交自己的變更。
    2. 如果確定本地代碼是需要保留,直接替換即可。
  2. 修改代碼

    1. 如果以master代碼為準(zhǔn),修改后的代碼示例:
    String name = "zhangsan-master";
    
    1. 如果以dev分支為準(zhǔn),修改后的代碼示例:
    String name = "zhangsan-dev";
    
  3. 將代碼添加到索引空間

    git add src/main/java/com/ttshixi/git/merge/MergeConflict.java  ##將沖突的代碼添加到索引空間
    git commit                               ##1.提交代碼,此時(shí)如果不寫(xiě)備注,會(huì)生成默認(rèn)的備注,并且會(huì)提示合并時(shí)沖突的文件
                                             ##2.彈出備注后,輸入':',并輸入wq,保存退出即可。
    git push                                 ## 將本地代碼變更推送到github                                                 
    
  4. 解決沖突文件后,默認(rèn)的提交備注信息:

Merge branch 'master' into dev
  
# Conflicts:
#       src/main/java/com/ttshixi/git/merge/MergeConflict.java
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
#       .git/MERGE_HEAD
# and try again.


# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.

3.撤銷本次合并

  1. 如果執(zhí)行merge命令后,未執(zhí)行過(guò)commit,則可以使用如下命令
git reset --hard HEAD ## 將代碼恢復(fù)到合并前的狀態(tài)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容