rebase 与 merge

🧩 一、核心区别:操作对象不同

操作 直译含义 dev 的基点变化 commit 历史是否重写 是否产生 merge commit
git rebase dev onto test "把 dev 移动到 test 上" ✅ 会改变(dev 的提交会重新基于 test) ✅ 会重写(新 commit ID) ❌ 不产生(线性历史)
git merge test into dev "把 test 合并进 dev" ❌ 不变(dev 保持原来的基点) ❌ 不重写 ✅ 会产生一个 merge commit

🧭 二、过程可视化理解

假设当前分支结构如下:

scss 复制代码
A---B---C (test)
         \
          D---E (dev)

✅ 执行 git rebase dev onto test 后:

dev 的提交 D、E 会 复制一份并重新接到 test 的 C 后面

css 复制代码
A---B---C---D'---E' (dev)

📌 效果:

  • 看起来像 dev 是直接从 test 派生的;
  • 历史是干净、线性的;
  • 但 D/E 的 commit hash 都变了(因为 rebase 本质是"复制+删除原提交")。

✅ 执行 git merge test into dev 后:

dev 会把 test 的提交合并进来,并生成一个合并提交:

scss 复制代码
A---B---C (test)
         \ 
          D---E---M (dev)

📌 效果:

  • dev 得到了 test 的所有改动;
  • 历史保留了两个分支的分叉;
  • 生成一个新的 merge commit M
  • 所有原 commit hash 保持不变。

⚖️ 三、使用场景对比

场景 推荐操作 原因
你在自己的分支上开发,还没推到远程,只想同步 test 最新改动 rebase dev onto test 保持线性历史,方便 review
dev 已经是共享分支,有多人在上面工作 merge test into dev 避免改写公共历史,安全
准备发 PR(希望提交历史干净) rebase 去掉不必要的 merge commit
要完整保留开发过程、分支结构 merge 历史清晰,易于追踪分支来源

💡 四、总结一句话

  • rebase:像是"重新整理笔记",让历史更整齐。
  • merge:像是"把两本书合成一本",保留所有分叉记录。
相关推荐
习惯就好zz8 小时前
Git 交互式 rebase 实战:将后续修改合并到历史提交
git
南棱笑笑生15 小时前
20260429给万象奥科的开发板HD-RK3576-PI适配瑞芯微原厂的Android14时删除全部的.git目录
git·rockchip
tsyjjOvO16 小时前
【Git 从入门到实战】(IDEA+Gitee 版)
git·gitee·idea
你知道“铁甲小宝”吗丶17 小时前
git推送到多平台(gitee/github)
git·gitee·github
bksczm17 小时前
Linux之基础开发工具之git
git
GUET_一路向前17 小时前
【git工作常用指令】
大数据·git·elasticsearch
handler0118 小时前
Git 核心指令速查
linux·c语言·c++·笔记·git·学习
二宝哥19 小时前
大数据之yum安装git
git
牛奶咖啡1319 小时前
Git实践——git远程仓库操作
git·git远程仓库的创建·github创建仓库·git将本地仓库推送到远程仓库·使用git克隆远程仓库到本地·git分支的创建与合并·git冲突的产生与解决
随风,奔跑20 小时前
Git学习笔记
笔记·git·学习