對於任何認真的開發人員來說,將功能隔離到不同的分支中都是至關重要的做法。透過分離每個功能、錯誤修復或工作實驗,您將避免許多問題保持開發分支乾淨

在某些時候,一段程式碼將達到您想要將其與專案的其餘部分整合的狀態。這就是git merge命令的用武之地。

準備合併

假設您想要將分支修補程式合併主分支

在開始之前,如何確保您已準備好合併變更?

  1. 使用git fetch檢查您的本機儲存庫是否與遠端伺服器的最新變更保持同步。

  2. 取得完成後git checkout master

  3. 透過執行git pull確保 master 分支具有最新更新。

  4. 簽出應該接收更改的分支,在我們的例子中是主分支。

合併

準備工作完成後,就可以使用git merge hotfix指令開始合併了。

快轉合併

當要合併的分支之間存在線性路徑時,可能會發生快轉合併。如果master沒有分歧,它不會建立新的提交,而是將master指向hotfix分支的最新提交。來自修補程式分支的所有提交現在都可以在 master 中使用。

git 合併快轉

但是,如果分支已發散,則無法進行快轉合併。在這種情況下,您想要使用三向合併

三路合併

當沒有到達目標分支的線性路徑時,Git 別無選擇,只能透過三向合併將它們組合起來。此合併使用額外的提交將兩個分支連接在一起。

git-merge-三路-merge-1

測試一下!使用RSpec 測試分支建立您自己的專案,同時編輯 master 中的控制器測試。現在,嘗試合併。

如何處理合併衝突

當您嘗試合併的兩個分支都變更了相同檔案的相同部分時,就會發生合併衝突,Git 將無法確定要使用哪個版本。

例如,如果檔案example.rb在同一 Git 儲存庫的不同分支的同一行上進行了編輯,或者該檔案已被刪除,則當您嘗試合併這些分支時,您將收到合併衝突錯誤。在繼續之前,必須使用新的提交解決合併衝突。

合併衝突僅在 3 路合併的情況下才會發生。

  1. 產生需要解析的檔案清單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")
  1. 當遇到衝突行時,Git 將使用視覺指示器來編輯受影響文件的內容,該指示器標記衝突內容的兩側。這些視覺標記是:
* `<<<<<<<` - **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
  1. 決定是否只保留修補程式或主更改,或編寫全新的程式碼。在合併變更之前刪除衝突標記。

  2. 當您準備好合併時,您所要做的就是對衝突的檔案執行git add命令,告訴 Git 它們已解決。

  3. 使用git commit提交更改以產生合併提交。

希望這可以幫助您更好地理解如何合併分支和處理衝突。

本文最初發表於Kolosek 部落格


原文出處:https://dev.to/neshaz/how-to-use-git-merge-the-correctway-25pd


共有 0 則留言