
- Git 入門
- Git - 首頁
- Git - 版本控制
- Git - 基本概念
- Git - 命令列
- Git - 安裝
- Git - 首次設定
- Git - 基本命令
- Git - 獲取幫助
- Git - 工具
- Git - 速查表
- Git - 術語
- Git 分支
- Git - 簡述分支
- Git - 建立新分支
- Git - 切換分支
- Git - 分支與合併
- Git - 合併衝突
- Git - 管理分支
- Git - 分支工作流程
- Git - 遠端分支
- Git - 追蹤分支
- Git - 變基
- Git - 變基 vs. 合併
- Git - 合併提交
- Git 操作
- Git - 克隆操作
- Git - 標籤操作
- Git - 別名操作
- Git - 提交操作
- Git - 暫存操作
- Git - 移動操作
- Git - 重新命名操作
- Git - 推送操作
- Git - 拉取操作
- Git - Fork 操作
- Git - Patch 操作
- Git - Diff 操作
- Git - 狀態操作
- Git - 日誌操作
- Git - HEAD 操作
- Git - origin master
- Git 撤銷
- Git - 撤銷更改
- Git - checkout
- Git - revert
- Git - reset
- Git - 還原操作
- Git - rm
- Git - switch 操作
- Git - cherry-pick
- Git - amend
- 伺服器上的 Git
- Git - 本地協議
- Git - 智慧 HTTP 協議
- Git - 啞 HTTP 協議
- Git - SSH 協議
- Git - Git 協議
- Git - 在伺服器上安裝 Git
- Git - 設定伺服器
- Git - Daemon
- Git - GitWeb
- Git - GitLab
- Git - 第三方託管選項
- 分散式 Git
- Git - 分散式工作流程
- Git - 為專案貢獻程式碼
- Git - 維持專案
- 自定義 Git
- Git - 配置
- Git - Hook
- Git - 屬性
- Git - init
- Git - commit
Git - 分支與合併
分支和合並是 Git(一種分散式版本控制系統)中最強大和最重要的兩個功能,開發人員使用它來管理和協作專案。
什麼是 Git 分支?
Git 分支是指建立一條新的開發線路,該線路與主專案分離的過程。每個分支代表一組獨立的更改,可以在隔離狀態下進行處理。
預設情況下,新的 Git 倉庫從名為main或master的單個分支開始。隨著開發的進行,您可以建立其他分支來處理新功能、錯誤修復或實驗性更改,而不會影響main分支的穩定性。
假設我們負責一個軟體專案,並且我們一直在向master分支(主開發分支)提交更改。
現在我們需要處理一個特定的功能或錯誤,例如實現一個新的身份驗證模組。

建立和管理分支
使用 Git,我們可以一次性建立一個新分支並切換到它來隔離這項工作,直到它準備好為止。
$ git branch auth-module $ git checkout auth-module

>-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分支分離。

使用這種方法,我們可以並行處理新功能或修復,同時保持main分支的穩定性。
假設在即時網站上報告了一個需要立即修復的錯誤(緊急問題解決)。
我們使用git checkout返回master分支以解決緊急問題。
$ git checkout master
Git 確保我們的工作目錄反映master分支在上次提交時的狀態。
Git 分支切換使我們可以專注於解決當前問題,而無需部署來自auth-module分支的不完整修改。
這種分離保證了我們在auth-module上的工作將繼續保持獨立和不受干擾,直到它準備好整合。

在切換分支之前,必須擁有一個乾淨的工作目錄。為了避免衝突,請確保所有與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(+)

在此合併過程中,我們看到了快速前進通知。這是因為bugfix分支基於master提交 C2 之前的狀態。
Git 只需將master分支的引用向前推進以包含 bugfix 修改。

現在更改已新增到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 在三方合併中組合來自master、auth-module及其共同祖先的更改。

Git 自動建立一個新的快照作為此合併的結果,並生成一個合併提交,該提交引用兩個父分支,而不是僅僅向前推進分支指標。
由於它合併了不同的歷史記錄,因此此合併提交是唯一的。
現在auth-module的修改已整合到 master 中,我們可以刪除分支並在我們的跟蹤系統中關閉相關問題。
$ git branch -d auth-module Deleted branch auth-module (3a0874c).
透過確保已完成的功能合併到 master 開發分支,此過程可以維護專案的完整性和進展。