如何解決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中完成合並操作。