在理解了分支的概念之后,现在我们可以探讨如何合并不同的分支。
在执行合并操作之前,执行 git status 以确保 HEAD 指向正确的接收分支。
如图假设我们现在要将feature分支合并到 main 分支.
使用 git merge [branch] 合并指定分支到当前分支,此时下面会有两种合并方式:
fast-forward merge
从当前分支尖端到目标分支的路径没有分叉时,会发生fast-forward合并。
这种情况Git 不是“实际上”合并分支,而是将当前分支指针提示向前移动(即“fast-forward”)到目标分支尖端。
3-way merge
从当前分支尖端到目标分支的路径出现分叉时,会发生3-way合并。
这种情况,Git会把两个分支的共同父节点与两个分支的最新提交进行比较。对于没有冲突的修改,Git会自动合并它们,创建一个新的合并提交。如果在不同分支上对同一行代码进行了修改,Git会遇到冲突。在这种情况下,Git无法自动解决冲突,需要用户手动解决。
快速合并是 Git 默认的合并模式,它不会创建新的合并提交记录,而是简单地将目标分支的指针指向源分支的最新提交。这导致合并后的提交历史线性,并且无法清晰看出哪些提交来自于哪个分支。
可以使用 git merge --no-ff 命令会禁用快速合并模式,并始终创建一个新的合并提交记录,无论目标分支与源分支之间是否存在直接的线性关系。
还有一些相关语句:
git merge --abort: 在合并过程中遇到问题或冲突时,可以使用此命令取消合并,并将当前分支回滚到合并之前的状态。
git merge --continue: 在解决合并冲突后,使用此命令继续进行合并。它将完成合并提交,并将保存解决冲突后的更改。