文章目录
- 深入了解 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
适用于保持历史清晰。