git合并
在 Git 中,“合并”(merge)是一个非常核心的操作,用来把两个分支的历史合并到一起,常见于开发流程中如:
- 从
feature
分支开发完成后合并回main
- 从远程分支拉取更新合并到当前分支
👨一句话解释:
合并就是把一个分支的改动整合进当前分支。
合并的两种方式
1. Fast-forward 合并(快进式合并)
如果当前分支(如 main
)没有新提交,而另一个分支(如 feature
)基于 main
开发,Git 只需“快进”指针。
bash
git checkout main
git merge feature
此时 main
会直接向前移动到 feature
的最新提交,不会产生新的合并提交。
特点:
- 没有冲突
- 没有合并提交
- 历史简单直线
2. 非 Fast-forward 合并(真正的合并)
当两个分支各自都有提交时,Git 会创建一个合并提交(merge commit),记录两个分支的共同历史。
bash
git checkout main
git merge feature
特点:
- 创建一个新的 commit(合并提交)
- 可以记录两个父分支
- 可能产生冲突(需要手动解决)
合并冲突
如果两个分支都改了相同的文件的相同部分,Git 无法自动合并,就会产生冲突。
解决流程如下:
bash
# 出现冲突后,Git 会提示冲突文件
# 编辑冲突的文件,保留你想要的改动
git add <冲突解决后的文件>
git commit # 完成合并提交(有些情况不需要再手动 commit)
合并 vs 变基(merge vs rebase)
git merge
:保留分支历史,能看到开发是如何进行的git rebase
:让提交历史线性化,更整洁
总结
合并方式 | 是否创建新提交 | 是否保持分支历史 | 推荐使用场景 |
---|---|---|---|
Fast-forward | 否 | 否 | 简单合并,保持线性 |
非 fast-forward | 是 | 是 | 多人协作开发 |
Rebase | 否(重写历史) | 否(线性) | 保持整洁历史(如 PR 前) |