Git:图解 merge 和 rebase 的区别

在 Git 的交汇处,每一次选择都是代码旅程的新起点。

在 Git 中,Merge 和 Rebase 是两种常用的分支整合方式,但是一些初学的小伙伴可能不知道它们之间有什么区别,以及二者该怎么选择。

本文将深入探讨 Merge 和 Rebase 的区别,帮助你更好地理解和运用它们,以提高代码管理的效率和质量。

Merge | 分支交汇的交叉路口

Merge的原理很简单,就是将要合并的两个分支的最新提交组合成一个新的提交,并且插入到目标分支中。

假设现在有一个 main 分支和一个 feature 分支,如图(图中数字为提交的先后次序,即最早的提交是1,然后是2,其次是3):

现在我想要把分 feature 分支 merge 到 main 分支上去,那么 git 会把两个分支的最新提交4和5合并成一个提交,并且合入目标分支 main:

当然,如果4和5中存在代码冲突,必须先解决代码冲突才能合并。

最终会得到这么两个分支:

具体的 merge 操作为:

git 复制代码
git checkout main
git merge feature

Rebase | 提交历史的线性编织

与 merge 不同的是,rebase 并不会保留原有的提交,而是会创建当前分支比目标分支更新的所有提交的副本, 在上述例子中(将 feature 变基到 main)就是 2' 和 4',然后将 2' 和 4' 按次序插入目标分支末尾:

这样就完成了一个 rebase 的过程。

同样,如果有代码冲突,首先需要解决冲突才能 rebase 成功。

最终得到的两个分支为:

具体的 rebase 操作为:

git 复制代码
git checkout main
git rebase feature

适用场景

不难发现,merge 和 rebase 最大的区别在于是否会保留原有的提交(或者说破坏原有的提交结构)。

merge 会对提交历史进行保留,很显然更适合多人协作开发的场景,因为如果出现问题也可以追溯到历史的每一次提交。

而 rebase 则是会让提交历史更加简洁易读,保持提交历史的线性结构,所以更适合个人开发和整理分支的情况。

一句话概括就是,如果我想要把某个特性分支 feature_xxx 合并到 main 分支中的时候,最好的方式就是 merge,而当我一个人需要开发某个 feature_xxx 分支的时候,最好的方式就是 rebase。

相关推荐
Sakura_j_h_3 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
BIBI20494 小时前
换 Git 托管平台怎么做?基于 TortoiseGit 的跨平台迁移教程
windows·git·tortoisegit·问题解决·版本控制·最佳实践
wflynn6 小时前
GitHub 今日推荐|Edge0:让大号 MoE 模型在一台 Mac 上流式跑起来
python·开源·github
用户别睡觉7 小时前
五大 RAG 开源项目对比 2026:Dify、RAGFlow、FastGPT、AnythingLLM、LightRAG
github
用户7273744138847 小时前
在 Windows 11 上从零装好 Carapace BIN:一次真实操作记录
github
miofly8 小时前
Claude Sonnet 5自主选药选坐标完成小鼠脑部手术,更强模型拒绝执行
开源·github
塞讯科技9 小时前
13,500 个分支被植入窃密工作流:Gheist 如何用 GitHub 令牌搬走仓库密钥
网络安全·ai·github·软件供应链安全·供应链投毒
echome88812 小时前
Git 日常救急:撤销提交、找回误删文件和解决冲突
git·版本控制
阿智的AI开发笔记14 小时前
充了 200 块只跑出 3 条:AI 视频真正贵的地方,是「按次」和「按秒」的区别
github
GitHub实测笔记14 小时前
rtk 本机实测:给 AI Agent 砍掉 90% 的命令行噪音(Linux)
github