對於任何認真的開發人員來說,將功能隔離到不同的分支中都是至關重要的做法。透過分離每個功能、錯誤修復或工作實驗,您將避免許多問題並保持開發分支乾淨。
在某些時候,一段程式碼將達到您想要將其與專案的其餘部分整合的狀態。這就是git merge命令的用武之地。
假設您想要將分支修補程式合併到主分支。
在開始之前,如何確保您已準備好合併變更?
使用git fetch
檢查您的本機儲存庫是否與遠端伺服器的最新變更保持同步。
取得完成後git checkout master
。
透過執行git pull
確保 master 分支具有最新更新。
簽出應該接收更改的分支,在我們的例子中是主分支。
準備工作完成後,就可以使用git merge hotfix
指令開始合併了。
當要合併的分支之間存在線性路徑時,可能會發生快轉合併。如果master沒有分歧,它不會建立新的提交,而是將master指向hotfix分支的最新提交。來自修補程式分支的所有提交現在都可以在 master 中使用。
但是,如果分支已發散,則無法進行快轉合併。在這種情況下,您想要使用三向合併。
當沒有到達目標分支的線性路徑時,Git 別無選擇,只能透過三向合併將它們組合起來。此合併使用額外的提交將兩個分支連接在一起。
當您嘗試合併的兩個分支都變更了相同檔案的相同部分時,就會發生合併衝突,Git 將無法確定要使用哪個版本。
例如,如果檔案example.rb
在同一 Git 儲存庫的不同分支的同一行上進行了編輯,或者該檔案已被刪除,則當您嘗試合併這些分支時,您將收到合併衝突錯誤。在繼續之前,必須使用新的提交解決合併衝突。
合併衝突僅在 3 路合併的情況下才會發生。
git status
# On branch master
# You have unmerged paths.
# (fix conflicts and run "git commit")
# Unmerged paths:
# (use "git add ..." to mark resolution)
# both modified: example.rb
# no changes added to commit (use "git add" and/or "git commit -a")
* `<<<<<<<` - **Conflict marker**, the conflict starts after this line.
* `=======` - **Divides** your changes from the changes in the other branch.
* `>>>>>>>` - End of the conflicted lines.
<<<<<<< HEAD(master)
conflicted text from HEAD(master)
=======
conflicted text from hotfix
>>>>>>> hotfix
決定是否只保留修補程式或主更改,或編寫全新的程式碼。在合併變更之前刪除衝突標記。
當您準備好合併時,您所要做的就是對衝突的檔案執行git add
命令,告訴 Git 它們已解決。
使用git commit
提交更改以產生合併提交。
希望這可以幫助您更好地理解如何合併分支和處理衝突。
本文最初發表於Kolosek 部落格。
原文出處:https://dev.to/neshaz/how-to-use-git-merge-the-correctway-25pd