git rebase 和 git merge的区别?以及你对它们的理解?

文章目录

前言

hello world欢迎来到前端的新世界


😜当前文章系列专栏:git操作相关

🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹

💖感谢大家支持!您的观看就是作者创作的动力

是什么

在使用 git 进行版本管理的项目中,当完成一个特性的开发并将其合并到 master 分支时,会有两种方式:

  • git merge
  • git rebase

git rebase 与 git merge都有相同的作用,都是将一个分支的提交合并到另一分支上,但是在原理上却不相同

用法上两者也十分的简单:

git merge

将当前分支合并到指定分支,命令用法如下:

git merge xxx(想要合并的分支名称)

git rebase

将当前分支移植到指定分支或指定commit之上,用法如下:

git rebase -i

常见的参数有--continue,用于解决冲突之后,继续执行rebase

git rebase --continue

分析

git merge

通过git merge将当前分支与xxx分支合并,产生的新的commit对象有两个父节点

如果"指定分支"本身是当前分支的一个直接子节点,则会产生快照合并

举个例子,bugfix分支是从master分支分叉出来的,如下所示:

合并 bugfix分支到master分支时,如果master分支的状态没有被更改过,即 bugfix分支的历史记录包含master分支所有的历史记录

所以通过把master分支的位置移动到bugfix的最新分支上,就完成合并

如果master分支的历史记录在创建bugfix分支后又有新的提交,如下情况:

这时候使用git merge的时候,会生成一个新的提交,并且master分支的HEAD会移动到新的分支上,如下:

从上面可以看到,会把两个分支的最新快照以及二者最近的共同祖先进行三方合并,合并的结果是生成一个新的快照

git rebase

同样,master分支的历史记录在创建bugfix分支后又有新的提交,如下情况:

通过git rebase,会变成如下情况:

在移交过程中,如果发生冲突,需要修改各自的冲突,如下:

rebase之后,master的HEAD位置不变。因此,要合并master分支和bugfix分支

从上面可以看到,rebase会找到不同的分支的最近共同祖先,如上图的B

然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件(老的提交X和Y也没有被销毁,只是简单地不能再被访问或者使用)

然后将当前分支指向目标最新位置D, 然后将之前另存为临时文件的修改依序应用

区别

从上面可以看到,merge和rebasea都是合并历史记录,但是各自特性不同:

merge

  • 通过merge合并分支会新增一个merge commit,然后将两个分支的历史联系起来

  • 其实是一种非破坏性的操作,对现有分支不会以任何方式被更改,但是会导致历史记录相对复杂

rebase

  • rebase 会将整个分支移动到另一个分支上,有效地整合了所有分支上的提交

  • 主要的好处是历史记录更加清晰,是在原有提交的基础上将差异内容反映进去,消除了 git merge所需的不必要的合并提交

后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

相关推荐
智慧化智能化数字化方案6 分钟前
数字化转型:解读IBM—大型酒业集团数字化转型项目实施方案建议书【附全文阅读】
大数据·人工智能·集团数字化转型·酒业集团数字化·食品公司数字化·快消品数字化
拥春飞翔10 分钟前
AI 生成测试用例:测试知识库选「开源向量库」还「Git+Markdown」?
人工智能·git·测试用例
冯RI375II6948723 分钟前
UL4200A认证流程简化版:快速掌握核心步骤
大数据
学习3人组31 分钟前
AI驱动获客:从数据到转化,一套可落地的智能获客系统全解析
大数据·人工智能·机器学习
普修罗双战士31 分钟前
高效使用 Git:从入门到精通的实战指南
java·git
程序鉴定师35 分钟前
上海本凡科技解密小程序开发公司的价格构成与市场价值
大数据·小程序
天或42 分钟前
以技术创新为翼,驱动时代向前|广州帆悦智能科技
大数据·人工智能·科技
数智化精益手记局1 小时前
拆解红牌作战的步骤:掌握红牌作战的步骤,解决现场管理难题
大数据·数据结构·人工智能·制造·精益工程
Elastic 中国社区官方博客2 小时前
Elasticsearch 多年来的演进 —— LogsDB 如何在不影响吞吐量的情况下将索引大小减少高达 75%
大数据·运维·elasticsearch·搜索引擎·全文检索·可用性测试
渣渣盟2 小时前
Flink流处理:实时计算URL访问量TopN(基于时间窗口)
大数据·flink·scala