在git中,沖突產(chǎn)生的原因是因?yàn)樵诤喜⑽募r(shí)同一個(gè)文件的同一個(gè)位置都修改了,并且內(nèi)容不同;也即兩個(gè)已經(jīng)提交的分支的相同文件相同位置的不同操作進(jìn)行了合并,所以產(chǎn)生了沖突;常見產(chǎn)生沖突的操作有兩分支合并和遠(yuǎn)程倉庫代碼拉取到本地。
本文操作環(huán)境:Windows10系統(tǒng)、Git2.30.0版、Dell G3電腦。
git為什么會(huì)產(chǎn)生沖突
一、常見產(chǎn)生沖突操作:
-
兩分支合并
-
遠(yuǎn)程倉庫代碼拉?。╬ull)到本地
二。沖突產(chǎn)生原因:
合并文件時(shí),同一個(gè)文件的同一個(gè)位置都修改了,且內(nèi)容不同,會(huì)產(chǎn)生沖突
三。解決步驟:
1. git status 查看沖突文件
2.vim src/main/java/a.txt (假設(shè)a.txt為沖突文件,這里需要為文件的全路徑),手動(dòng)修改沖突部分
3.git add src/main/java/a.txt 告訴Git沖突解決了
4.git commit -m ‘解決沖突’ (解決沖突為注釋,可自定義)
兩個(gè)已經(jīng)提交的分支的相同文件相同位置的的不同操作進(jìn)行了合并.
實(shí)戰(zhàn)演示
(1)情景
本地庫中兩個(gè)不同分支,修改同一個(gè)文件同一代碼塊,兩分支先后將修改合并到master分支上,master在合并第二個(gè)分支代碼時(shí),報(bào)錯(cuò):合并沖突。
(2)本地庫
<1>master分支
<2>建立兩個(gè)分支
<3>兩分支修改提交
aBranch分支:
bBranch分支:
(3)合并分支產(chǎn)生沖突
合并aBranch分支(將aBranch分支合并到當(dāng)前master分支上):
注:
git merge:默認(rèn)情況下,Git執(zhí)行"快進(jìn)式合并"(fast-farward merge),會(huì)直接將Master分支指向Develop分支。
使用–no-ff參數(shù)后,會(huì)執(zhí)行正常合并,在Master分支上生成一個(gè)新節(jié)點(diǎn)。為了保證版本演進(jìn)的清晰,建議采用這種方法。
再合并bBranch分支,產(chǎn)生沖突:
mergeTest.txt 文件內(nèi)容:
(4)解決沖突
在當(dāng)前分支上(master),找到?jīng)_突文件,直接修改沖突代碼,add,commit。
注:簡(jiǎn)單方法,使用vim修改,cat查看沖突文件。(注意要?jiǎng)h除git自動(dòng)生成的沖突代碼分隔符)
(5)完成沖突解決
注:提交或者合并都會(huì)生成git節(jié)點(diǎn)。每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)代碼版本。
推薦學(xué)習(xí):《Git教程》