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

简介: 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所需的不必要的合并提交

后言

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


目录
相关文章
|
30天前
|
开发工具 git 开发者
git rebase的使用
通过这些思维导图和分析说明表,您可以更直观地理解Git rebase的概念、用法和应用场景。希望本文能帮助您更高效地使用Git rebase,提高代码管理的效率和质量。
58 17
|
1月前
|
开发工具 git 开发者
git rebase的使用
通过这些思维导图和分析说明表,您可以更直观地理解Git rebase的概念、用法和应用场景。希望本文能帮助您更高效地使用Git rebase,提高代码管理的效率和质量。
77 13
|
2月前
|
前端开发 持续交付 开发工具
理解前端开发中的 Git - Rebase
Git Rebase 是前端开发中常用的一种版本控制操作,用于将一个分支的更改整合到另一个分支。与合并(Merge)不同,Rebase 可以使提交历史更加线性整洁,有助于保持代码库的清晰和可维护性。通过 Rebase,开发者可以将特性分支的改动应用到主分支上,同时保留或重写提交记录。
|
3月前
|
存储 开发工具 git
Git和SVN有什么区别?
综上所述,选择Git还是SVN取决于项目的具体需求、团队规模以及工作习惯。Git因其高级特性和灵活性,成为了现代软件开发中更受欢迎的选择,而SVN在某些特定场景下仍保有一席之地。开发者应当根据实际情况,权衡两者之间的优劣,作出最适合项目的选择。
105 4
|
5月前
|
开发工具 git 开发者
|
5月前
|
开发工具 git 开发者
Git Fetch 和 Git Pull:理解两者的区别
【8月更文挑战第27天】
477 1
|
4月前
|
网络性能优化 开发工具 git
使用git rebase --onto一例
使用git rebase --onto一例
|
开发工具 git 开发者
git使用—rebase还是merge
转载自:https://segmentfault.com/q/1010000007704573/ 我猜现实中的情况是这样的: 使用 git 的人群中,不会用 rebase(哪怕是基础功能的)的至少一半(这个估计恐...
1616 0
|
2月前
|
开发工具 git
git 常用命令
这些只是 Git 命令的一部分,Git 还有许多其他命令和选项,可根据具体需求进行深入学习和使用。熟练掌握这些命令能够帮助你更高效地管理代码版本和协作开发。
|
1月前
|
机器学习/深度学习 Shell 网络安全
【Git】Git 命令参考手册
Git 命令参考手册的扩展部分,包含了从基础操作到高级功能的全面讲解。
41 3