Git遇到?jīng)_突?解決也太簡單了!
:
git沖突是開發(fā)過程中很難避免的,對很多git初學者來說也是比較有障礙和門檻的一部分知識。
我認為要想徹底理解一個問題,首先要清楚這個問題是怎么產(chǎn)生的,然后才可以更加簡單的解決這個問題,而且這樣做還可以從根本上加深對git的用法理解,避免每次遇到時都需要反反復復的搜索答案。
下面就逐步的介紹一下,幫助大家徹底理解什么是合并沖突?如何解決合并沖突?
什么是Git合并?什么是合并沖突?
首先,Git 是一個版本控制系統(tǒng),可以保存所有文件版本的歷史記錄。 開發(fā)者可以隨時回退到任何版本并檢索舊版本。
假設,創(chuàng)建了一個名為 abc.txt 的文件并將其推送到 Git 倉庫。 此時,該文件具有與其關聯(lián)的當前版本。 現(xiàn)在,如果你的同事更改了同一個文件并將其推回倉庫,則該文件關聯(lián)了一個新版本。
Git Merge 是一項功能,可讓使文件的當前內(nèi)容與其他先前版本保持同步。 換句話說,Git 合并可幫助你在將新更改推送到同一文件之前合并來自其他開發(fā)人員的更改。

在 Git 合并的過程中,需要理解兩件事情:
更改:文件的兩個版本之間發(fā)生了什么類型的操作? 添加或刪除新內(nèi)容,或更新現(xiàn)有內(nèi)容。
區(qū)域:更改的區(qū)域有兩種可能性。 更改發(fā)生在文件的不同區(qū)域或更改發(fā)生在文件的同一區(qū)域。 同一區(qū)域意味著開發(fā)人員圍繞文件的同一位置(例如,段落、行等)進行了更改。
如果更改不同區(qū)域時,這種情況比較簡單,Git 使用自動合并策略自動處理大多數(shù)這些情況。
但是當更改發(fā)生在文件的同一區(qū)域時,Git 不會執(zhí)行自動合并,它會提示沖突讓開發(fā)者解決。
以一個具體的例子來解釋合并沖突的產(chǎn)生過程:
張三更改了文件abx.txt,然后把它提交到了遠程倉庫
李四并不知道張三改了這個文件,與此同時,它也對同一文件、同一區(qū)域做了更改
李四把更改推送到遠程倉庫,這是Git會提示版本過舊,需要更新
李四重新從遠程倉庫拉取代碼更新,再次提交時會收到自動合并沖突的警告

這個過程是不是似曾相識?
這就是合并沖突以及它的產(chǎn)生過程,下面就來介紹如何解決合并沖突!
如何解決合并沖突?
解決合并沖突其實并不難,在90%的情況下,當你對內(nèi)容變化清楚的時候就會簡單很多。
接著前面的例子,李四更改abc.txt之后,本地文件就包含自己的修改和張三的修改。所以,接下來就需要選擇具體的處理措施:
保留張三的更改并刪除自己的更改
刪除張三的更改并保留自己的更改
保留張三和自己的更改
刪除張三和自己的更改
應該選擇哪一個呢? 這完全取決于項目的需求。 但是,至少要保證即將發(fā)生的變化,這樣才知道選擇何種措施。然后才可以逐步解決沖突。
下面就來逐步解決沖突!
場景1:修改同一文件同一區(qū)域
當 Git 由于更改在同一區(qū)域中而無法執(zhí)行自動合并時,它會用特殊字符指示沖突的區(qū)域,字符序列是這樣的:
<<<<<<<
=======
>>>>>>>
<<<<<<< 和 ======= 之間的所有內(nèi)容都是你的本地更改,這些更改還不在遠程存儲庫中。 ======= 和 >>>>>>>> 之間的所有行都是來自遠程存儲庫或另一個分支的更改。
接著前面的例子,假如張三更改后的內(nèi)容是:
- Eat
- Read
- Gym
李四更改后的內(nèi)容是:
- Eat
- Read
- Sleep
合并時就會產(chǎn)生下面沖突:
- Eat
- Read
<<<<<<< HEAD
- Sleep
=======
- Gym
>>>>>>>
接下來就需要對比這兩部分內(nèi)容,做出自己的選擇,應該保留哪一個或者刪除哪一個,這個完全取決于業(yè)務的現(xiàn)實情況。
在接受了更改之后,還沒有結(jié)束,還需要做如下操作:
git add <files>
git commit -m "Message"
git push
這樣就解決了合并沖突。
場景2:文件在遠程/其他分支被刪除
在刪除的文件合并沖突中,一個開發(fā)人員在一個分支中刪除一個文件,而另一個開發(fā)人員在另一個分支中編輯同一個文件。 在這種情況下,你需要決定是要保留該文件還是刪除它。
要將已刪除的文件添加回你的分支,需要執(zhí)行以下操作:
git add <file-name>
如果確定要刪除這個問津啊,就執(zhí)行下面操作:
git rm <file-name>
然后,就是把更改提交:
git commit -m "Message"
git push
上面2種場景就是git沖突中比較常見的現(xiàn)象,其實,在git使用過程中很多報錯或者告警信息都提示的非常情況,我們?nèi)绻軌蜉p松的讀懂報錯信息、理解基本原理以及問題發(fā)生原因,其實解決問題就是水到渠成的事情!
建議大家有空可以多瀏覽Github,有很多好用的開源免費工具。但是,目前Github上項目多如牛毛,而且刷榜現(xiàn)在也非常嚴重,想要找到優(yōu)質(zhì)的項目變得越來越難。這里,給大家推薦Github上一個非常不錯的項目《DevWeekly》,這個項目每周都會精挑細選一些優(yōu)質(zhì)的開源項目,涵蓋C++、JAVA、JavaScript、Python、Go等不同編程語言。此外,還有一些開源工具、優(yōu)秀的技術文章,而且考慮到很多同學訪問Github不方便的問題,我還特意同步到了Gitee,建議大家看一下:
hello,大家好,我是Jackpop,重點大學本科畢業(yè)后保送到哈工大計算數(shù)學專業(yè)讀研,有多年國內(nèi)頭部互聯(lián)網(wǎng)、IT公司工作經(jīng)驗,先后從事過計算機視覺、推薦系統(tǒng)、后端、數(shù)據(jù)等相關工作。如果同學們在升學考研、職業(yè)規(guī)劃、高考志愿、簡歷優(yōu)化、技術學習
Git遇到?jīng)_突?解決也太簡單了!的評論 (共 條)
