1. 程式人生 > >Git使用手冊/Git教程:git pull origin 拉取程式碼到本地,解決拉取程式碼時發生的檔案衝突

Git使用手冊/Git教程:git pull origin 拉取程式碼到本地,解決拉取程式碼時發生的檔案衝突

1)拉取(下載)指定分支程式碼合併到當前分支:

相當於指定分支的程式碼與當前分支的程式碼合併到了一起。

命令:git pull origin分支名稱

注意:

每次使用該命令前,需要保證本地工作區是沒有任何修改程式碼的,也就是說需要將本地工作區編輯過的檔案新增到暫存區(git add .),或提交到本地倉庫中(git commit),才可以使用該命令拉取指定分支的程式碼合併到當前分支中。

每次在操作完git commit命令後,必須拉取一下master分支程式碼,保持本地正在開發功能邏輯的程式碼分支程式碼是最新的,避免後續在提交時衝突過多或覆蓋掉其他人的程式碼的問題出現。

如果我們需要將master主幹分支的程式碼拉取並與我們當前分支(xuzhangzheng2)的程式碼進行合併的話,可以使用該命令。效果如圖:


執行命令後,可以看到提示Alreadyup-to-date,意思為:已經是最新的了,無需進行更新。

當我們拉取的主幹分支master被修改後,再執行拉取命令,會看到如圖所示效果:


粉色框框選部分為自動合併程式碼的檔案

綠色框框選部分為本次更新(包含新增、刪除、修改)的檔案及具體資訊,檔名後面的9 表示有9行有更新, +++++++++表示這些更新是新增(+)還是刪除(-)。

紅色框框選部分為本次更新影響的檔案數,新增的行數(insertions),刪除的行數(deletions)。

2)解決拉取程式碼時發生衝突的情況

當我們執行git pullorigin 分支名稱 命令想要拉取某一個分支的最新程式碼到本地,併合併到當前分支時,遇到了如下圖的提示:


從圖中我們看到,出現了兩行提示語:

CONFLICT(content):Merge conflict inxxxx/xxx/xxx/xxx.java

Automatic merge failed;fix conflicts andthen commit the result.

分別使用紅色和綠色框選出來了。

紅色框框選部分為出現衝突的檔案,綠色框框選部分為提示語:自動合併失敗,修改衝突然後提交修改後的結果。

第一句中提到了一個關鍵詞CONFLICT(content),這個詞的出現表明某一個具體檔案在合併過程中發生了衝突。發生衝突的原因大致可以理解為你與你的同事兩個人在同一個檔案中都進行了編輯操作,當其中一個人拉取合併了另一個人的分支,或拉取合併了另一個人合併過的分支的話,就會出現合併衝突的問題。

衝突,簡單的說,同一個檔案2個人編輯,2個人如果編輯的行數沒有重合的話(一個人寫1-10行,另一個人寫11-20行),合併時就沒有衝突;若2個人編輯的行數有重合的話(一個人寫1-10行,另一個人寫5-15行),合併時就會出現衝突,同時,會將2個人編寫的內容都羅列出來,讓出現衝突的那個人進行解決,最終將衝突解決完畢後,再進行提交合並等操作。

此時我們查看出現衝突的檔案:

按照衝突提示的路徑找到衝突對應檔案(我使用的IDEA,由於有語法檢查,所以一開啟就看到錯誤檔案在哪了),開啟檔案後,會看到如圖紅框框選部分,被藍色線分割為了2部分,同時可以看到3個藍色框框選的文字資訊,如下三句:

<<<<<<< HEAD

=======
>>>>>>> a5d8ca0b4fd8847b2c21d96900ac1edcf859ca1b

中間的======是用於分割本地變更和遠端倉庫中的變更的,也就是說出現衝突時,如圖,使用======把衝突的部分分割成2塊。

上面的是本地修改變更的內容,以<<<<<<<HEAD開頭。

下面的是遠端倉庫修改變更的內容,以>>>>>>>版本號 結尾。

版本號,也就是示例中的a5d8ca0b4fd8847b2c21d96900ac1edcf859ca1b,即為提交的版本號,使用該版本號可以在gitlab中找到提交記錄,從而方便查詢其他同事在對同文件進行修改時,都修改了哪些內容,便於進解決衝突。

解決方法:

根據實際業務場景,將本地修改變更的部分和遠端倉庫中修改變更的部分進行合併,留下滿足業務邏輯的程式碼即可(若團隊開發期間,出現衝突時,建議找到相關同事進行溝通,確保自己解決衝突的方法不會影響到其他人編寫的功能),同時將上面提到的衝突標識刪除掉,不然無法通過語法檢查和編譯。

同時建議使用全檔案內容搜尋<<<<<<<或======或>>>>>>>,將所有有衝突的地方一一進行解決,保重提交的程式碼是可執行,沒有問題的。

解決衝突後,若需要提交程式碼的話,需先將程式碼使用git add .存入快取區,或直接使用git commit –am “本次提交描述” 或git commit –a –m “本次提交描述”將程式碼提交至本地倉庫區,同時再次拉取制定分支的最新程式碼,確保本次的程式碼時刻都是最新的,再進行接下來的推送程式碼至遠端倉庫操作。


如您有其他問題,希望可以通過留言得形式及時交流,有書寫錯誤和可優化的地方也希望及時提出,感謝。