如果您正在使用Git進行原始碼管理,您可能需要將專案中的不同開發分支合併為單一分支。本文將指導您如何使用Git合併命令將兩個開發分支結合。
我們將向您展示如何創建一個Git專案,創建不同分支,並將一個分支合併到另一個分支。此外,您將學習什麼是快速合併和3路合併,以及如何將一個分支合併到遠端存儲庫。
什麼是Git合併?
Git是一個流行的DevOps工具,開發人員可以使用它來跟蹤和管理不同團隊編寫的代碼更改。使用Git合併命令,您可以將當前的開發分支(從主分支派生的)和其代碼更改合併回主分支。
在團隊中工作時,您最常使用Git合併命令。有時您和另一個開發人員可能會在兩個獨立分支上共同協作一個功能。但是,當時間到來時,您需要將您的工作合併為一個分支,測試這些更改,然後將您的協作開發合併到主開發分支中。
隨著主要開發分支的更新,您和其他開發人員正在進行的獨立功能分支將不會隨團隊的更改而更新。因此,作為最佳實踐,當提出拉取請求的時候,您應該始終從最新更改開始更新您本地版本的主分支。然後,在將其提交並提出拉取請求合併到主要開發分支之前,您可以將更新後的主分支合併到您的開發分支中。
如何使用Git merge合併兩個Git分支
作為開發人員,精通Git可真正幫助您提高生產力。首先,從命令行中執行Git命令是至關重要的。在我們開始之前,讓我們看看在開始合併不同Git分支之前您需要設定的事情。
先決條件
要開始,您將需要以下項目:
- A Windows, Mac, or Linux machine to run Git.
- Git應用程序,可以在此處下載。
- A GitHub or Gitlab account.
- 例如Visual Studio Code的代碼編輯軟件。
讓我們快速檢視在Windows PC上安裝Git所需的不同步驟(我們也有一個獨立的指南來介紹如何在Ubuntu上安裝Git):
- 點擊連結下載適用於您電腦的Git並安裝檔案。
- 安裝完成後,打開您的命令提示字元並輸入 git –version:
git –version
如果返回版本號碼,太棒了!但是,如果收到“找不到命令”消息,那麼您可能需要將Git添加到您的 $PATH 變數中。這通常是Windows問題。
讓我們快速解決這個問題,這樣您就不必浪費時間尋找了。
- 去開始條並右鍵點擊 此電腦。
- 選擇 內容。
- 點擊 進階系統設定。
- 在系統內容下,點擊 環境變數。在這裡,您可以將值添加到 $PATH 變數中。
- 選取 $PATH 並點選 編輯。
- 點擊 新增 並加入 git/cmd 的路徑。
- 點擊 新增 並加入 git.exe 檔案的路徑。
儲存變更,返回終端機,再次執行 git -version 指令。
git -version
現在您應該能得到版本號碼。在完成前置作業並設定您的 GitHub 或 Gitlab 帳戶後,您現在應該可以開始運作了。
建立一個 Git 專案
在這個部分,我將帶您完成建立新存儲庫所需的不同步驟。
在您新建立的 Github 帳戶上,點擊螢幕左側的 新增。

接下來,您需要為您的存儲庫命名並填入一些其他細節。如果需要,您可以給它一個簡短描述,將其設為公開,最佳做法是始終添加一個 ReadMe 檔案。完成後,點擊 建立存儲庫。

現在,要在您的程式編輯器中進行工作,您需要通過點擊 複製 按鈕來複製您的新存儲庫。選擇 HTTPS,複製地址,然後打開您的終端機。

在您的終端機中,使用 cd 指令 選擇您想要為專案建立新目錄的位置。
cd user/desktop/repo/
當你在正確的分支上時,使用mkdir 命令來創建一個新目錄:
mkdir <name of your directory>
現在,再次使用cd命令來切換到剛創建的目錄:
cd <name of your newly created directory>
進入新目錄後,使用git init命令來創建一個新存儲庫:
git init
接下來,使用帶有正確HTTPS地址的git clone命令,然后按Enter鍵。默認情況下,這將在您的本地存儲庫上創建一個主分支。
git clone <paste https address here>
現在,用Visual Studio Code打開您新克隆的存儲庫。您現在可以開始編寫代碼。
創建完存儲庫後,您已經處於主分支上。作為最佳實踐,您應該永遠不要直接將代碼推送到主分支,這應該是受保護的。
不过在实际操作中,你将无法直接向主分支推送代码而不经过拉取请求。
创建另一个 Git 分支
我们目前在主分支上,你已经编写了一些内容,现在你想创建一个新的分支。
在终端中,使用 git checkout 命令 创建一个新的分支并自动切换到它:
git checkout -b <name of new branch>
该命令应该会自动从主分支中切出新的分支,因此后者的代码不应更改。
现在,我们将开始有趣的部分,我们将能够使用 git merge 命令。在你新创建的分支上,你首先需要添加更多的代码,以使你当前的分支超前于主分支并有一些新的更改。
现在,你想将这个新分支合并到主分支中,你可能会遇到一个 合并冲突,这是一种与已存在的代码冲突的代码插入。处理这些问题真的不好玩。
所以你在做什麼?讓我們看看如何將一個分支合併到另一個分支。
將兩個 Git 分支合併到本地存儲庫
當你在新分支上時,進入終端並使用 git branch 命令來驗證你目前所在的分支名稱:
git branch
現在你在新分支上,再次使用 git checkout 命令切換到主分支:
git checkout Main
接著,使用 git pull 命令來導入團隊可能做出的任何更改,並將你本地的主分支更新為最新狀態:
git pull
現在,再次使用 git checkout 切換到想要與主分支合併的新分支:
git checkout <your specified branch>
現在是使用 git merge 命令的時候了。這將採取你的主分支的當前版本,然後將其合併到你的開發分支:
git merge Main
合併結果將包含代碼的最新版本以及你開發的功能。
合併 Git 分支的其他方法
在向你展示如何將一個新分支與我們的主分支合併之後,讓我們看看可能需要使用的其他合併 Git 分支的方法。
什麼是快速轉寄合併?
A fast-forward merge is another way to merge multiple commits on one branch with one command rather than merging them all manually. Another advantage of using a fast-forward merge is that it will combine the histories of multiple commits while squashing the commit history.
假設我們的一個功能分支比主分支領先幾個提交。我們希望將所有這些提交合併而無需手動逐個合併。在這種情況下,我們將使用快進式合併。
在我們的示例中,我們將通過編寫一些代碼並使用git add和git commit命令將一個新的提交添加到我們的分支:
git add <filename>
git commit –m “added a thing”
現在,我們將再次使用相同的命令向新分支添加另一個提交:
git add <filename>
git commit –m “added another thing”
接下來,我們想將這兩個提交推送到我們的遠程存儲庫,而無需進行兩次推送。為此,我們需要在git合併命令上使用-ff
git merge --ff
這將同時合併兩個提交到一個並使您的代碼追趕主分支。
什麼是三方合併?
想象一種情況,您的開發團隊在兩個獨立分支上創建了一些新功能。現在,您準備更新這些分支並將它們合併到主分支中,以便後者準備將代碼推送到遠程存儲庫。
為了確保新功能正確地一起運作,最好將功能分支合併到彼此,然後進行一些測試。三方合併將允許我們將兩個具有共同祖先的獨立分支組合起來。
讓我們一起走過執行三方合併到目標分支所需的步驟。在下面的示例中,我們將首先創建一個新的分支,向其添加兩個提交,然後將其與我們的主分支合併,使用三方合併。
首先,讓我們通過使用 git checkout 命令創建一個 ‘new-feature’ 分支並自動切換到它。使用此命令與 -b 選項會導致創建一個新的分支:
git checkout -b new-feature main
接下來,我們使用以下命令向我們的分支添加一些文件和一個新的提交:
git add <file>
git commit -m "Start a feature"
然後,我們使用以下命令向我們的新分支添加另一個提交:
git add <file>
git commit -m "Finish a feature"
在我們向新分支添加新代碼之後,您必須想像一種情況,即我們的主分支也繼續進展。我們將首先使用 git checkout 命令切換回它:
git checkout main
接下來,我們將向我們的主分支添加一個新的提交:
git add <file>
git commit -m "make some changes to Main"
現在,我們想要將我們之前創建的 ‘new-feature’ 分支與我們更新的主分支合併。由於工作將繼續在我們的主分支上進行,我們將通過使用 git branch 命令刪除 ‘new-feature’ 分支。
git merge new-feature
git branch -d new-feature
現在,我們將我們的兩個分支與共同祖先合併到了我們的主分支中。後者現在已準備好合併到您的遠程存儲庫中,並進一步增加我們的軟件項目,接下來我們將看到如何執行該操作。
如何將 Git 分支合併到遠程存儲庫
有時候,您可能需要將一個分支合併到遠端倉庫中。讓我們來看看如何完成這個步驟。
讓我們想象一個情況,您為產品擁有者想要創建的新功能編寫了新的代碼。在測試代碼並與產品擁有者審查過後,您現在準備將辛勤工作合併到團隊的遠端倉庫中。
正如之前提到的,您永遠不能直接將代碼推送到主分支。您必須始終尊重我們在本指南開頭詳細說明的 Git 工作流程。
在複習了 Git 過程後,讓我們將您的代碼合併進來。回到之前的進度,現在我們有一個最新的分支:主分支的最新更新已經被拉取到您的本地倉庫中。
您現在站在遠端倉庫的大門口。該怎麼到達那裡呢?簡單,我們將使用更多的 git 命令。
作為最佳實踐,您應該總是使用 git status 命令檢查您的分支狀態。該命令將顯示已添加、刪除、跟蹤或為跟踪的文件。
git status
您還應該查看是否添加了為跟踪的文件。在這種情況下,您需要將它們添加進來,這樣它們才會被跟踪並添加到提交中。
您可以使用 git add 命令添加您在开发中创建的所有文件。现在,如果您只想添加特定文件,您可能需要将一些文件名写出来。如果您要添加所有文件,请使用“.” 添加所有文件。
接下来,我们将使用 git commit 命令提交在上一步中添加的所有文件。您需要使用 -m 标志来编写消息,否则您将被推送到文本编辑器模式来编写消息,这不是一个流畅的过程。
对于您的消息,您可以写一个关于您做了什么的简短说明。例如,“创建了一个新的很酷的功能,并向菜单添加了一个新的图标,并修复了错误。”
git commit -m “<your commit message goes here>”
最后,您可以使用 git push 命令将您的分支推送到远程存储库。
git push --set-upstream origin <<your branch name>>
现在,在推送您的分支之后,您需要转到 GitHub 或您的远程存储库托管的位置,找到您最近的推送,然后点击 创建拉取请求。

一旦您点击此按钮,您将被带到一个页面上,可以添加审阅者和团队成员,他们将批准或拒绝您的合并请求。在后一种情况下,他们将能够添加关于在允许您将您的分支合并到远程主分支之前需要修复什么的评论。

一旦審查完成並且您的合併請求已經被批准,合併按鈕將會出現。點擊此按鈕開始合併。如果合併成功,您將收到一條確認新代碼已被添加的消息。

恭喜!您已經掌握了使用git merge命令的基本知識!
結論
Git merge是一個強大的命令,可以讓您和您的團隊在新功能上使用不同分支,然後將它們合併到主儲存庫中。
您已經學會了創建分支、合併它們、向它們添加文件和提交,最重要的是,將這些分支推送到遠端儲存庫。此外,您現在了解如何執行快進合併以使用一個命令結合多個相關分支,這真的可以幫助使任何開發工作更加高效。
Git是一個強大的工具,能做很多事情。您對可以使用的不同命令了解得越多,作為開發人員將會變得更好。現在您已經學會了關於合併分支的所有必要知識,是時候去學習其他命令了。祝您在掌握Git的過程中好運!