首页 > 其他分享 >git 中的 merge 类型

git 中的 merge 类型

时间:2022-09-24 14:55:16浏览次数:70  
标签:改动 git 对比 merge base way 类型 节点

1. 2-way merge 和 3-way merge 

作者:Lazykid
链接: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

 

标签:改动,git,对比,merge,base,way,类型,节点
From: https://www.cnblogs.com/yinhuachen/p/16725639.html

相关文章

  • 基本数据类型
    基本数据类型java的基本数据类型:数值类型:整数类型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)浮点数类型:float(4字节)、double(8字节)字符类型:char(2字节)bo......
  • Java基础(标识符,数据类型,数据转换,变量)
    注释Java中的注释有3种:单行注释 //多行注释/**/文档注释/***/注释不会被执行,是给我们写代码的人看的书写注释是一个非常好的习惯标识符Java所有的组成部......
  • git commit、git bisect 和你的生活有什么相似之处?
    gitcommit、gitbisect和你的生活有什么相似之处?你认为一个商人在编程面试中会紧张吗?你能想象gitcommit、gitbisect、你的生活和星际电影?生活不仅可以带您度过......
  • 每个开发人员都应该知道的基本 Git 命令
    每个开发人员都应该知道的基本Git命令Githubgit克隆用于将目录从GitHub复制到您的计算机。git克隆主要用于指向现有存储库,并在另一个位置的新目录中创建该存......
  • 变量和认识数据类型
    一、变量1、变量的概念和组成部分(1)变量名程序中,数据都是临时存储在内存当中,为了更快速的查找或使⽤这个数据,通常之后,定义⼀个名称,这个名称就是变量名。(2)变量值......
  • idea中的git图形页面
    学会在idea提交、推送、拉取、切分支多人开发必须要用版本控制,都在代码会比较大!版本控制工具:(1)git(2)SVN(3)CVS一、分布式版本控制git(目前最先进的分布式版本控制系统)所......
  • 面试说:聊聊JavaScript中的数据类型
    前言请讲下JavaScript中的数据类型?前端面试中,估计大家都被这么问过。答:Javascript中的数据类型包括原始类型和引用类型。其中原始类型包括null、undefined、boole......
  • 无法将类型string隐式转换为textbox wpf中
    大致意思是这样的,想把我获取到的字符串放入textbox中,然后我就写了这么一句a.textbox="获取到的字符串"  然后就有了下面的错误,啥也不说,强转a.textbox=(Textbox)"获取......
  • git 放弃修改,放弃增加文件操作
    1.本地修改了一些文件(并没有使用gitadd到暂存区),想放弃修改单个文件/文件夹:gitcheckout--filename所有文件/文件夹:gitcheckout.2.本地新增了一些文件(并没......
  • 数据类型转换
    packagebase;importjava.util.Date;publicclassClassTransform{publicstaticvoidmain(String[]args){inti=128;byteb=(byte)i......