文章目錄
- 深入了解 Git Merge:用法、類型與合并沖突處理
- 一、Git Merge 是什么?
- 二、Git Merge 的工作流程
- 四、Git Merge 的類型
- 1. Fast-forward Merge(快進合并)
- 2. Three-way Merge(三方合并)
- 四、Git Merge 示例
- 假設你有如下 Git 分支情況
- 五、處理合并沖突
- 六、合并 vs. 變基(Rebase)
- 七、總結
深入了解 Git Merge:用法、類型與合并沖突處理
一、Git Merge 是什么?
git merge
是 Git 中用于合并分支的命令,通常用于將一個分支的更改合并到當前分支。
二、Git Merge 的工作流程
- 你需要在目標分支(通常是
main
或develop
)上執行git merge
,并提供你想合并的分支名稱。 - Git 會嘗試將源分支的更改應用到當前分支上。
- 如果兩個分支沒有沖突,Git 會直接合并。
- 如果有沖突,需要手動解決沖突后再提交。
四、Git Merge 的類型
Git Merge 主要有兩種模式:
1. Fast-forward Merge(快進合并)
當目標分支是源分支的祖先時,Git 只需將目標分支的指針直接移動到最新提交,無需創建新提交。
示例:
git checkout main # 切換到主分支
git merge feature # 合并 feature 分支(如果 main 沒有新的提交,會快進合并)
效果:
main
分支的指針會直接移動到 feature
分支的最新提交,不會產生額外的合并提交。
2. Three-way Merge(三方合并)
當兩個分支各自有獨立的提交時,Git 需要創建一個新的合并提交,將兩個分支的內容合并。
示例:
git checkout main # 切換到主分支
git merge feature # 合并 feature 分支
如果 main
和 feature
分支都有新的提交,Git 會創建一個新的合并提交。
示例合并提交:
Merge branch 'feature' into main
四、Git Merge 示例
假設你有如下 Git 分支情況
* f3d5e2d (feature) 新增登錄功能
* a8c2b1a (main) 修復 bug
你希望把 feature
分支合并到 main
,可以執行以下命令:
git checkout main # 切換到 main 分支
git merge feature # 合并 feature 分支
如果沒有沖突,Git 會直接合并,并生成一個新的合并提交:
Merge branch 'feature' into main
五、處理合并沖突
如果 Git 發現相同文件的相同部分在兩個分支中被修改,它會提示合并沖突(merge conflict),例如:
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
此時,你需要:
-
手動編輯
index.html
,解決沖突(刪除沖突標記<<<<<<
,======
,>>>>>>
)。 -
使用
git add index.html
標記解決沖突。 -
提交合并結果:
git commit -m "解決合并沖突"
六、合并 vs. 變基(Rebase)
如果不想創建合并提交,可以使用 git rebase
,它會把 feature
分支的提交一個個移動到 main
分支的最新提交之上,使 Git 歷史更整潔。
git checkout feature
git rebase main
但是,git rebase
可能會導致沖突處理更加復雜,因此需要謹慎使用。
七、總結
git merge
用于將一個分支的更改合并到當前分支。- 快進合并(fast-forward merge) 適用于目標分支無新提交的情況,不會產生新的合并提交。
- 三方合并(three-way merge) 適用于兩個分支都有新提交的情況,會創建新的合并提交。
- 處理沖突時,需要手動修改文件,
git add
標記解決后再git commit
。 git merge
適用于團隊協作,而git rebase
適用于保持歷史清晰。