本系列所有文章都放在
Git标签,总目录如下:
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 中进行合并操作的方法
- 认识了合并冲突的产生原因与解决方法
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)
.webp)