我们在通过命令远程拉取代码时,特别是大家共同维护的项目。经常会出现Merge和Rebase两种模式的选择。
但是貌似两种都可以拉取和合并代码。但是Git不可能提供两个一样的功能让我们选择啊。
那这两者之间的区别是什么?
我们在使用TortoiseGit等GUI界面进行操作的时候,很多时候会弱化Merge和Rebase。如果我们长时间都是通过GUI界面进行操作的话,那么这两者之间的关系并不太容易把握。
而使用Android Studio等工具内部集成的Git,每次从远端拉取时就会出现下面的对话框让我们选择:
而使用TortoiseGit 工具通过面板拉取时,只会有一个拉取操作。
但是其实它执行也是执行了相关的命令,示例如下图:
这两个操作,其实主要就是为了解决代码同步合并的问题。不管多复杂,它们两个核心述求就是为了针对不同的分支合并需求而创建的。
项目多人合作开发的情况下,版本控制和专门的修改分支会越来越多,当分支开的那么多的情况下。代码的各种合并同步就是一个很复杂的操作了。
Merge incoming changes into the current branch (将传入的更改合并到当前分支)。
一般比较常见的操作都是通过Merge进行的合并。但是该合并方式下有多种策略,并不是无脑的将文件内容同步。
主要有:Fast-foward,Recursice,Ours,Octopus 等几种策略。git会自动根据commit的提交记录集选择合适的策略进行合并操作。
Rebase the current branch on top of incoming changes(在传入更改的基础上重新设置当前分支的基址)
我们的分支合并如果弄错了。会出现已经修改的代码被合并错误了。
相较于Merge的分支合并,Rebase会改变提交的历史,这也是为什么它是会在更新基础上重置当前分支。
本篇只是简单介绍一下Merge和Rebase。介绍的比较短,我们很多时候其实并不太需要了解这两种的区别,但是如果由你来负责一个项目的代码维护,review其他同事提交的代码时。那么这两种提交逻辑就必须要弄明白。否则会耗费很多无效的时间在代码的各种合并上去。
但是普通使用的情况下:开发只属于自己的分支时使用rebase ,可以减少无用的commit被合并到主分支中。
而多人合作情况下,使用merge,在减少冲突的同时,也让每个人的提交都有迹可循。
(ps:之后通过实际场景进行介绍,才能让大家更明白merge和rebase的区别。等有空了写一篇相关的学习内容吧,本篇只是一个基础开端)
附上一些参考资料:
git合并原理 - 知乎 (zhihu.com)
Git - 高级合并 (git-scm.com)
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有