news 2026/5/13 6:03:33

Git 中的 Rebase 与 Merge:原理、区别与最佳实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Git 中的 Rebase 与 Merge:原理、区别与最佳实践

文章目录

    • 1. 引言:为什么 Git 会有 rebase 和 merge 两种方式?
    • 2. Git Merge:保留真实历史的合并
      • 2.1 Merge 的基本思想
      • 2.2 Merge 的使用方式
      • 2.3 Merge 的优点
      • 2.4 Merge 的缺点
    • 3. Git Rebase:重写历史的“整理术”
      • 3.1 Rebase 的基本思想
      • 3.2 Rebase 的使用方式
      • 3.3 Rebase 的优点
      • 3.4 Rebase 的缺点
    • 4. Rebase 与 Merge 的核心区别
      • 操作位置对比
    • 5. 冲突处理上的区别
      • Merge 冲突
      • Rebase 冲突
    • 6. 一个重要原则
    • 7. 实战推荐用法
      • 场景 1:个人功能分支
      • 场景 2:合并到主分支
      • 场景 3:提交前整理 commit
    • 8. GitHub / GitLab 的最佳实践
    • 参考

1. 引言:为什么 Git 会有 rebase 和 merge 两种方式?

在团队开发中,我们经常会遇到这样的场景:

  • 多个人在同一个仓库并行开发
  • 主分支(main / master)在不断前进
  • 自己的功能分支需要同步最新代码

这时,Git 给我们提供了两种选择:

  • git merge
  • git rebase

它们都能“合并代码”,那到底有什么区别?


2. Git Merge:保留真实历史的合并

2.1 Merge 的基本思想

merge的核心思想是:

把两个分支的历史“汇合”在一起,并生成一个新的合并提交。

示意图如下:

A---B---C---D (main) \ / E---F (feature)

合并后:

A---B---C---D------M (main) \ / E---F----- (feature)

其中M是一个Merge Commit


2.2 Merge 的使用方式

gitcheckout maingitmerge feature

注意要合并的时候切换到目标分支


2.3 Merge 的优点

  • 不修改历史,绝对安全
  • 提交记录完整可追溯
  • 适合多人协作、公共分支

2.4 Merge 的缺点

  • 提交历史可能出现大量 merge commit
  • 日志图可能较为“杂乱”
  • 不利于线性回溯提交

3. Git Rebase:重写历史的“整理术”

3.1 Rebase 的基本思想

rebase的核心思想是:

把当前分支的提交“挪到”另一个分支的最新提交之后。

示意图:

A---B---C---D (main) \ E---F (feature)

Rebase 后:

A---B---C---D---E'---F' (feature)

注意:

  • E'F'新提交
  • 原来的EF已被替换

3.2 Rebase 的使用方式

gitcheckout featuregitrebase main

3.3 Rebase 的优点

  • 提交历史线性、干净
  • 更容易阅读和回滚
  • 非常适合整理本地提交

3.4 Rebase 的缺点

  • 重写提交历史
  • 如果操作不当,容易引发协作问题
  • 不适合已经推送到远程的公共分支

4. Rebase 与 Merge 的核心区别

维度mergerebase
是否生成新提交是(merge commit)否(重写提交)
历史是否线性
是否修改历史
风险程度
适用场景公共分支本地分支

操作位置对比

操作当前所在分支目标分支命令格式
git rebase当前分支要变基到的分支git rebase 目标分支
git merge当前分支要合并进来的分支git merge 来源分支

5. 冲突处理上的区别

Merge 冲突

  • 只解决一次冲突
  • 生成一个 merge commit

Rebase 冲突

  • 每一个提交都可能冲突
  • 需要多次git rebase --continue

6. 一个重要原则

永远不要 rebase 已经推送到远程的公共分支

原因:

  • 会改变提交 hash
  • 导致他人无法正常拉取代码
  • 可能引发灾难性冲突

7. 实战推荐用法

场景 1:个人功能分支

✅ 推荐 rebase

gitcheckout featuregitrebase main

目的:
👉 保持提交历史干净


场景 2:合并到主分支

✅ 推荐 merge

gitcheckout maingitmerge feature

目的:
👉 保留真实开发历史


场景 3:提交前整理 commit

gitrebase -i HEAD~3

可用于:

  • 合并提交
  • 修改提交信息
  • 删除无用提交

8. GitHub / GitLab 的最佳实践

  • 功能开发:rebase同步主分支
  • 最终合并:mergesquash merge
  • 禁止对main/master执行 rebase

参考

【五分钟学会git rebase和 git merge的区别】

Git:图解 merge 和 rebase 的区别

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 17:39:24

如何设计接口测试用例?

接口测试用例设计其实跟功能测试用例设计是类似的,从根本上来说都是验证产品功能的实现情况。但是功能测试偏向于测试前端数据的展示、业务逻辑,但是有些情况是前端无法模拟的(如前端的支付金额无法为负值),此时就需要…

作者头像 李华
网站建设 2026/4/27 7:52:04

日化产品想贴牌?源头厂家直供,成本降一半

想要打造属于自己的洗发水、洗衣液、面膜或者洗手液品牌吗?贴牌生产(OEM)确实是一条最为快捷的路径。但许多刚开始涉足这个领域的新手,在第一步就遇到了麻烦:他们找不到真正的源头厂家,反而被贸易商一层又一层地加价&…

作者头像 李华
网站建设 2026/5/12 8:57:25

JAVA理发预约系统:同城服务秒速响应

JAVA理发预约系统:同城服务秒速响应,打造高效、智能、个性化的美发体验 在快节奏的都市生活中,理发作为高频刚需服务,用户对“快速预约、精准匹配、透明服务”的需求日益迫切。JAVA凭借其跨平台、高并发、安全稳定等特性&#xff…

作者头像 李华
网站建设 2026/4/28 8:12:34

一键预约理发,JAVA系统畅享同城便利

一键预约理发,JAVA系统畅享同城便利——打造高效、智能、无缝衔接的美发体验在快节奏的都市生活中,“一键预约理发”已成为用户对同城服务的核心需求。JAVA凭借其高并发处理能力、跨平台兼容性、安全稳定性,成为构建理发预约系统的理想选择。…

作者头像 李华
网站建设 2026/5/11 13:39:26

是德科技DSOX4054A DSOX4024A DSOX4034A示波器

是德DSOX4054A示波器说明:   DSOX4054A 示波器:500 MHz,4 个模拟通道。   4000 X 系列拥有一系列引以为傲的配置,包括采用了电容触摸屏技术的 12.1 英寸显示屏、InfiniiScan 区域触摸触发、100 万波形/秒捕获率、MegaZoom…

作者头像 李华
网站建设 2026/5/6 7:38:54

NMFC04处理器模块

NMFC04 处理器模块简介NMFC04 处理器模块用于工业控制系统中,负责核心运算、数据处理及系统运行协调。作为系统的核心运算单元,承担控制处理任务具备较强的数据处理与运算能力控制响应速度快,满足实时控制需求支持多任务并行处理与各类功能模…

作者头像 李华