在前幾天的文章中,我們已經學會了如何建立分支 (git branch
)、切換分支 (git switch
/ git checkout
),以及如何暫存修改 (git stash
)。
分支開出去後,總要回到主線,否則專案就像「平行宇宙」般分裂。
今天的主角 —— git merge
,就是 Git 世界裡的「橋樑建設者」,負責把分支合併,讓程式碼重新會合。
git merge
?想像團隊開發情境:
feature/login
分支開發登入功能feature/cart
分支開發購物車功能最終這些功能都要合併回 main
分支,才能一起上線。
這時候,git merge
就派上用場,它會把不同分支上的修改「匯流」到同一條線上,維持專案歷史的完整性。
切換到要合併的目標分支(通常是 main
):
git switch main
執行合併:
git merge feature/login
Git 會將 feature/login
分支的修改整合到 main
分支。
當目標分支沒有新的 commit 時,Git 會直接把目標分支指標移到來源分支的最新 commit。
當目標分支和來源分支都有 commit,但修改的內容不衝突時,Git 會自動合併,並生成新的 merge commit。
當兩個分支修改了同一檔案的同一行,Git 無法自動判斷誰對誰錯,就會產生衝突。
開發者需要手動解決衝突,然後重新提交。
衝突範例:
<<<<<<< HEAD
這是 main 分支的版本
=======
這是 feature/login 分支的版本
>>>>>>> feature/login
解決步驟:
編輯檔案,保留正確內容:
這是最終決定的版本
將檔案加入暫存區:
git add README.md
完成合併 commit:
git commit
git rebase
(需謹慎操作)feature/test
,修改檔案並 commitmain
,使用 git merge feature/test
合併修改git log --graph --oneline
,觀察 merge 的結果git merge
是分支的「會合點」,讓開出去的分支能回到主線