1. 程式人生 > >如何解決GitHub衝突:使用命令列解決合併衝突

如何解決GitHub衝突:使用命令列解決合併衝突

如何解決GitHub衝突<二>:使用命令列解決合併衝突

原文地址:https://help.github.com/desktop/guides/contributing/syncing-your-branch/

你可以使用命令列和文字編輯器來解決“合併衝突”。

合併衝突往往會發生在以下情況:

(1)多個程式碼更改發生在同一行程式碼上

(2)一個提交刪除了某一個檔案而另一個提交嘗試去編輯該檔案

1.解決同行程式碼競爭引起的合併衝突

為了解決一個由更改同行程式碼引起的合併衝突,你必須決定在衝突方中哪一個提交的程式碼才是最終需要提交到分支上。

舉個例子,如果你和另一位開發人員在一個Git程式碼倉庫內同時修改了styleguide.md檔案中的同一行,你就會在合併分支時遇到合併衝突報錯。你必須用一個新的程式碼提交來解決這個合併衝突,只有這樣,合併才能完成。

(1)開啟Git Bash。

(2)進入發生程式碼衝突的本地Git倉庫。


(3)獲取受到合併衝突印象的檔案列表。在本例中,檔案styleguide.md有一個合併衝突。


(4)開啟你最心愛的文字編輯器,例如Atom,並用他找到檔案中衝突發生的地方。

(5)你可以查詢“<<<<<<<”標記符出現的地方來定位合併衝突發生的位置。當你在文字編輯器中開啟你的衝突檔案時,你會在“<<<<<<< HEAD”行後面看到HEAD或主分支內有區別的程式碼。接著,你會看到“=======”,這個標記符將劃分你的程式碼修改和另一個分支上的程式碼修改,進跟著“>>>>>>> BRANCH-NAME

”。在這個例子中,一個開發人員提交“open an issue”在主分支(HEAD),而另一個開發人員在對比分支(branch-a)上寫了“ask your question in IRC”


(6)決定你是否只保留你分支上的程式碼,還是保留另一個開發人員提交的程式碼,或者編寫一個全新的程式碼提交(包含兩者)。刪除衝突標記符“<<<<<<<”,“=======”,“>>>>>>>”,並對檔案完成你想要的修改。在這個例子中,我們保留了兩個程式碼提交。


(7)增加你的修改。


(8)提交程式碼。


現在,你就可以在命令列上進行分支合併操作,或者將修改推送至Github遠端倉庫,並在一個pull request中完成合並操作。

2.解決檔案刪除引起的合併衝突

為了解決修改檔案引起的合併衝突,例如有人編輯了被另一個人刪除的檔案,你必須決定該檔案究竟應該被刪除還是保留在專案分支中。

舉個例子,如果你編輯了一個檔案,例如README.md,而另一個人在同一個Git倉庫的另一個分支移除了這個檔案,當你嘗試合併分支時你會遇到一個合併衝突報錯。你必須解決這個衝突,以期能繼續合併分支。

(1)開啟Git Bash。

(2)進入發生程式碼衝突的本地Git倉庫。


(3)獲取受到合併衝突印象的檔案列表。在本例中,檔案styleguide.md有一個合併衝突。


(4)開啟你最心愛的文字編輯器,例如Atom,並用他找到檔案中衝突發生的地方。

(5)決定你是否要保留被移除的檔案。你也許想在文字編輯器中檢視被移除檔案最後的修改。

下面指令將把被移除的檔案重新加回倉庫中:


下面指令能移除你倉庫中的衝突檔案:


(6)提交程式碼。


現在,你就可以在命令列上進行分支合併操作,或者將修改推送至Github遠端倉庫,並在一個pull request中完成合並操作。