Git - 分支與合併



分支和合並是 Git(一種分散式版本控制系統)中最強大和最重要的兩個功能,開發人員使用它來管理和協作專案。

什麼是 Git 分支?

Git 分支是指建立一條新的開發線路,該線路與主專案分離的過程。每個分支代表一組獨立的更改,可以在隔離狀態下進行處理。

預設情況下,新的 Git 倉庫從名為mainmaster的單個分支開始。隨著開發的進行,您可以建立其他分支來處理新功能、錯誤修復或實驗性更改,而不會影響main分支的穩定性。

假設我們負責一個軟體專案,並且我們一直在向master分支(主開發分支)提交更改。

現在我們需要處理一個特定的功能或錯誤,例如實現一個新的身份驗證模組。

git branch merge1

建立和管理分支

使用 Git,我們可以一次性建立一個新分支並切換到它來隔離這項工作,直到它準備好為止。

$ git branch auth-module
$ git checkout auth-module
git branch merge2

>-b選項可以簡化此操作,無需分別建立分支然後再切換到它。

$ git checkout -b auth-module

此命令會將工作目錄複製到auth-module分支並立即構建它。Git 會發送一條訊息確認此修改。

Switched to a new branch 'auth-module'

現在,修改和提交只會影響auth-module分支。

例如,讓我們編輯與身份驗證相關的檔案,並使用以下命令提交我們的修改:

$ vim auth.py
$ git commit -a -m 'Implement user authentication module'

auth-module分支將與master分支分離。

git branch merge3

使用這種方法,我們可以並行處理新功能或修復,同時保持main分支的穩定性。

假設在即時網站上報告了一個需要立即修復的錯誤(緊急問題解決)。

我們使用git checkout返回master分支以解決緊急問題。

$ git checkout master

Git 確保我們的工作目錄反映master分支在上次提交時的狀態。

Git 分支切換使我們可以專注於解決當前問題,而無需部署來自auth-module分支的不完整修改。

這種分離保證了我們在auth-module上的工作將繼續保持獨立和不受干擾,直到它準備好整合。

git branch merge4

在切換分支之前,必須擁有一個乾淨的工作目錄。為了避免衝突,請確保所有與auth-module相關的修改都已提交或儲存。

Git 的分支管理透過啟用針對任務和緊急需求的快速上下文切換來提高工作效率,減少管理和實施更改的工作量,促進團隊合作並快速解決問題。

然後,出現了一個需要我們立即關注的錯誤。讓我們透過建立一個bugfix分支來處理這個問題。

$ git checkout -b bugfix
Switched to a new branch 'bugfix'
$ vim index.html
$ git commit -a -m 'Fix critical bug in login process'
[bugfix 1fb7853] Fix critical bug in login process
 1 file changed, 2 insertions(+)

進行測試以確保補丁在進行必要的調整後滿足標準至關重要。驗證後,我們透過將其合併回master來部署 bugfix 分支。

$ git checkout master
$ git merge bugfix
Updating f42c576..3a0874c
Fast-forward
index.html | 2 ++
1 file changed, 2 insertions(+)
git branch merge5

在此合併過程中,我們看到了快速前進通知。這是因為bugfix分支基於master提交 C2 之前的狀態。

Git 只需將master分支的引用向前推進以包含 bugfix 修改。

git branch merge6

現在更改已新增到master分支,我們可以繼續進行解決方案的部署。

成功部署主要錯誤補丁後,我們可以安全地從我們的儲存庫中刪除不再需要的 bugfix 分支,從而保持其井然有序。

$ git branch -d bugfix
Deleted branch bugfix (3a0874c).

現在,我們可以返回我們的auth-module分支並在該分支中繼續工作。

$ git checkout auth-module
Switched to branch 'auth-module'
$ vim auth.py
$ git commit -a -m 'Finish implementing user authentication module'
[auth-module ad82d7a] Finish implementing user authentication module
1 file changed, 1 insertion(+)
  • 必須理解,auth-module分支並不總是立即包含在 bugfix 分支中所做的修改。

  • 如果需要,我們可以使用 git merge master將這些修改包含到auth-module中。

  • 或者,我們可以等到準備好將auth-module整合到 master 中。

基本合併

當我們完成auth-module分支的工作並準備好將其整合到master時,我們開始合併過程。

$ git checkout master
Switched to branch 'master'
$ git merge auth-module
Merge made by the 'recursive' strategy.
auth.py |    1 +
1 file changed, 1 insertion(+)

此合併與之前的 bugfix 合併不同。

git branch merge7

在本例中,我們的開發歷史有所不同。

Git 在三方合併中組合來自masterauth-module及其共同祖先的更改。

git branch merge8

Git 自動建立一個新的快照作為此合併的結果,並生成一個合併提交,該提交引用兩個父分支,而不是僅僅向前推進分支指標。

由於它合併了不同的歷史記錄,因此此合併提交是唯一的。

現在auth-module的修改已整合到 master 中,我們可以刪除分支並在我們的跟蹤系統中關閉相關問題。

$ git branch -d auth-module
Deleted branch auth-module (3a0874c).

透過確保已完成的功能合併到 master 開發分支,此過程可以維護專案的完整性和進展。

廣告