侧边栏壁纸
博主头像
Z同学博主等级

工作磨平激情前,坚持技术的热忱。 欢迎光临Z同学的技术小站。 分享最新的互联网知识。

  • 累计撰写 290 篇文章
  • 累计创建 57 个标签
  • 累计收到 98 条评论
Git

Git 高级合并工具 Merge 和 Rebase 简单介绍(一)

Z同学
2022-03-25 / 0 评论 / 4 点赞 / 2,459 阅读 / 1,143 字
温馨提示:
本文最后更新于 2022-03-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1.介绍

我们在通过命令远程拉取代码时,特别是大家共同维护的项目。经常会出现Merge和Rebase两种模式的选择。

但是貌似两种都可以拉取和合并代码。但是Git不可能提供两个一样的功能让我们选择啊。

那这两者之间的区别是什么?
image-20220324165016506

我们在使用TortoiseGit等GUI界面进行操作的时候,很多时候会弱化Merge和Rebase。如果我们长时间都是通过GUI界面进行操作的话,那么这两者之间的关系并不太容易把握。

而使用Android Studio等工具内部集成的Git,每次从远端拉取时就会出现下面的对话框让我们选择:

image-20220324170009590

而使用TortoiseGit 工具通过面板拉取时,只会有一个拉取操作。

但是其实它执行也是执行了相关的命令,示例如下图:

image-20220325103626413

2. 高级合并

这两个操作,其实主要就是为了解决代码同步合并的问题。不管多复杂,它们两个核心述求就是为了针对不同的分支合并需求而创建的。

项目多人合作开发的情况下,版本控制和专门的修改分支会越来越多,当分支开的那么多的情况下。代码的各种合并同步就是一个很复杂的操作了。

2.1 Merge-合并

Merge incoming changes into the current branch (将传入的更改合并到当前分支)。

一般比较常见的操作都是通过Merge进行的合并。但是该合并方式下有多种策略,并不是无脑的将文件内容同步。

主要有:Fast-foward,Recursice,Ours,Octopus 等几种策略。git会自动根据commit的提交记录集选择合适的策略进行合并操作。

2.2 Rebase-变基

Rebase the current branch on top of incoming changes(在传入更改的基础上重新设置当前分支的基址)

我们的分支合并如果弄错了。会出现已经修改的代码被合并错误了。

相较于Merge的分支合并,Rebase会改变提交的历史,这也是为什么它是会在更新基础上重置当前分支。

3. 后记

本篇只是简单介绍一下Merge和Rebase。介绍的比较短,我们很多时候其实并不太需要了解这两种的区别,但是如果由你来负责一个项目的代码维护,review其他同事提交的代码时。那么这两种提交逻辑就必须要弄明白。否则会耗费很多无效的时间在代码的各种合并上去。

但是普通使用的情况下:开发只属于自己的分支时使用rebase ,可以减少无用的commit被合并到主分支中。

而多人合作情况下,使用merge,在减少冲突的同时,也让每个人的提交都有迹可循。

(ps:之后通过实际场景进行介绍,才能让大家更明白merge和rebase的区别。等有空了写一篇相关的学习内容吧,本篇只是一个基础开端)

附上一些参考资料:

git合并原理 - 知乎 (zhihu.com)

Git - 高级合并 (git-scm.com)

4

评论区