git 中的 merge 类型
1. 2-way merge 和 3-way merge
链接:https://www.zhihu.com/question/30200228/answer/866309494
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Three-way merge 是因为有a b, c三个节点。如果只提供a,b, 就是two-way merge.
Three-way merge的好处是程序能理解你到底做了哪些改动,如果这些改动没有冲突,则它会自动帮你合并。 Two-way merge说白了就是一个diff, 程序永远不能帮你自动merge, 需要人工干预。
举个例子, 假设有一个文本文件,A和B同时做了改动, a,b 节点如下

现在问题来了,merge的结果应该是怎样的? 条件不足,无法判断。
如果现在告诉它们的共同祖先c,进行three-way merge:

通过base/src的对比,我们知道A的改动是删除了3; 通过base/dst的对比,我们知道B的改动是增加了1,所以merge结果是:

类似的,如果原来的c节点是这样的:

则通过base/src对比,我们知道A的操作是删除了1; 通过base/dst的对比,我们知道B的操作是增加了3。则merge的结果应该是:

由此可见,如果只有节点a和b,进行two-way merge,其实是无法确定到底做了什么改动,merge的结果应该是怎样的,必须由用户自己解决。如果有a/b的共同祖先c的信息,three-way merge 能通过对比知道用户做了哪些增删改操作,并尝试自动merge结果.
2. fast-forward merge
How a Git merge fast forward happens
When Git detects that your commit is about to be merged into your project's main branch without the main branch having been modified since your feature branch was first made, it chooses to use a fast-forward merge instead of a three-way merge. Fast-forward merges literally move your main branch's tip forward to the end of your feature branch. This keeps all commits created in your feature branch sequential while integrating it neatly back into your main branch.
来源:https://blog.mergify.com/what-is-a-git-merge-fast-forward/
总的来说,当一个feature-branch已经修改完毕,而 master-branch尚无任何改动,就会发生 fast foward merge。(直接把 feature branch 的末端作为新的 master branch)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?