git merge和rebase合并分支的区别
一、描述
在使用 git 进行版本管理的项目中,在feature分支开发完成,要将其合并到master分支时,我们有两种方式,一种是 git merge 另一种是 git rebase ,通常,我们对git merge 比较熟悉,而对git rebase 使用较少。其实,git rebase 也是极其强大的一种合并方法,下面我们就讨论下merge 和 rebase 的差别已经使用场景。
如下图,你在feature分支上进行开发,于此同时你在master也有新的提交。
为了将master分支合并feature到上,有两种选择,merge 和 rebase。
二、git merge
最简单的方法是使用以下方法将master合并到feature:
1 2 | git checkout feature git merge master |
或者执行:
1 | git merge feature master |
那么在feature上会自动产生一个提交记录(merge commit)
merge 合并之后的结果:
merge合并的优点:
- 自动创建一个新的commit,记录了真实的commit情况,方便查看记录
- 如果合并遇到冲突,仅需要修改后重新commit即可
merge的缺点:就是每次合并都会产生一个新的commit, 所以在使用一些git的 GUI工具,特别是commit比较频繁时,就会看到分支线很杂乱。这时如果有问题需要查找就会很困难。
三、git rebase
与git merge功能一致,rebase的目的也是将一个分支的更改合并到另一个分支中去。
rebase 在很多中文翻译中,会翻译为 “变基” 。
执行以下命令:
1 2 | git checkout feature git rebase master |
如上图所示,rebase的特点:
- 改变当前分支从master上拉出分支
- 没有多余的合并历史记录,并且合并后的commit顺序不一定按照commit的提交时间排序
- 可能会多次解决同一个地方的冲突
- 提交记录更干净,master上每个commit点都是相对独立完整的功能点
假如我们在rebase的过程中遇到了冲突,我们在解决冲突之后,需要执行:
1. git add
2. git rebase --continue 来继续变基的操作。
3. 如果执行第二步无效,那么可以执行 git rebase --skip
注意:不要执行完 git add 之后执行 git commit
可以看出,feature 分支上的所有提交信息都会被合并到 master 分支上了,这些信息对我们来说不是必要的,我们在 masetr 分支上往往只需要知道合并进来了什么新的功能即可,这些多余的信息可以通过 git rebase 的交互模式进行整合
四、git rebase 交互模式
打开变基的交互模式只需要传入一个参数 -i 即可,同时指定对哪些提交进行处理,例如:
1 | git rebase -i HEAD~4 |
以上命令指定了对当前分支的最近四次提交进行操作,下面可以使用上面的命令对 feature 分支的提交进行合并:
处理完之后可以使用下面的命令进行提交
五、总结
当需要保留详细的合并信息的时候建议使用git merge,特别是需要将分支合并进入master分支时;当发现自己修改某个功能时,频繁进行了git commit提交时,发现其实过多的提交信息没有必要时,可以尝试git rebase。
参考:
https://www.atlassian.com/git/tutorials/merging-vs-rebasing
https://www.liaoxuefeng.com/wiki/896043488029600/1216289527823648
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2017-02-23 移动端WEB开发,click,touch,tap事件浅析
2017-02-23 移动端click事件延迟300ms到底是怎么回事,该如何解决?
2017-02-23 DIV+CSS布局命名规范