
4.0 本节命令行汇总
git checkout master # 切换到目标分支git merge 1.0-dev # 将指定分支合并到当前分支git merge --no-ff 1.0-dev # 合并时禁止快进,强制创建合并提交git config --global merge.ff false # 全局设置:合并时默认禁止快进git add <file> # 暂存冲突解决后的文件git commit # 完成冲突解决4.1 合并分支的基本概念
在上一节中,我们学习了如何创建和切换分支。当在不同分支上完成开发后,需要将分支的改动合并到一起。本节将学习 Git 的两种合并方式。
合并的本质:
将一个分支的提交历史”拼接”到另一个分支上。合并后,目标分支会新增一个合并提交,记录两条分支的交汇点。
4.2 第一种合并:普通合并(merge)
普通合并适用于两条分支都有新的提交、且提交历史产生分叉的场景。
4.2.1 合并场景
场景:项目主分支
master在Commit 3处创建了1.0-dev分支。之后,master继续开发到Commit 5,1.0-dev也完成了1.0版本开发到Commit 4。现在需要将1.0-dev的功能合并回master。
4.2.2 合并操作
首先切换到目标分支(master),然后执行合并:
git checkout mastergit merge 1.0-dev
4.2.3 合并结果
执行合并后,master分支会新增一个合并提交(Merge commit),这个提交有两个父提交,分别指向合并前的两个分支的最新提交。
4.2.4 合并冲突
VS Code 提供了图形化的合并操作界面。
- 点击底部状态栏左侧的分支名
- 在弹出的分支列表中,选择要合并到当前分支的目标分支
- 右键点击目标分支,选择
将 <分支名> 合并到 <当前分支> - 或者在源代码管理面板中,点击
...菜单,选择合并分支,然后选择目标分支


如果两个分支对同一文件的同一位置进行了不同的修改,Git 无法自动合并,此时会产生合并冲突。VS Code 会用特殊的标记显示冲突内容,需要手动选择保留哪一方的改动。

合并冲突的标记格式如下:
<<<<<<< HEAD当前分支的内容=======被合并分支的内容>>>>>>> <分支名>手动解决冲突后,保存文件,然后执行:
git add <file>git commit完成冲突解决。
合并完成后,1.0-dev分支的改动已经被完整地合并到了master中。

4.3 第二种合并:快进合并(fast-forward)
快进合并发生在目标分支没有任何新提交、仅仅是被”甩在后面”的场景下。此时 Git 会直接将指针向前移动,而不创建新的合并提交。
4.3.1 快进场景
场景:项目主分支
master在Commit 3处创建了1.0-dev分支。之后,只有1.0-dev有新的提交(Commit 4),而master没有任何新提交。这种情况下,从master合并1.0-dev时就会触发快进合并。
由于master没有任何新提交,Git 会”快进”指针,直接将master移动到1.0-dev所在的位置。这个过程不会创建新的合并提交,历史仍然是线性的。

如果希望保留分支的完整历史记录,可以在合并时添加--no-ff参数,强制创建合并提交:
git merge --no-ff 1.0-dev或者直接在配置文件中更改,这是一劳永逸的方法:
git config --global merge.ff false
4.4 本节小结
| 知识点 | 说明 |
|---|---|
| 普通合并(merge) | 两条分支都有提交时,创建合并提交 |
| 快进合并(fast-forward) | 目标分支无新提交时,直接移动指针 |
--no-ff 参数 | 强制创建合并提交,保留分支历史 |
| 合并冲突 | 同一文件同一位置的不同修改需要手动解决 |
本节完成了以下内容:
- 理解了 Git 合并的基本概念
- 掌握了普通合并(merge)的完整流程
- 学会了快进合并(fast-forward)的原理与
--no-ff参数的使用 - 了解了在 VS Code 中进行合并操作的方法
- 认识了合并冲突的产生原因与解决方法
Git学习笔记
连载中分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 104 天
部分内容可能已过时
评论