Skip to main content

merge和rebase的区别

🧩 一、两者的核心区别

对比项git mergegit rebase
主要作用把两个分支的修改合并在一起把一个分支的修改“移动”到另一个分支上
是否创建新提交✅ 会产生一个新的 merge commit❌ 不会(只是重新排列历史)
提交历史结构分叉 + 合并,历史分支清晰但复杂线性,历史干净但会改写 commit
是否改变已有提交哈希是(会重新生成新的 commit)
适合场景保留真实开发历史(团队协作)整理个人提交、保持线性历史(个人分支)

🧭 二、图示理解

假设当前历史如下:

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

🔹 1. 使用 git merge main

git checkout feature
git merge main

结果:

A --- B --- C ------ M (merge commit)
\ /
D --- E ----

✅ 优点:保留完整的分支信息 ❌ 缺点:历史中多了一个「合并提交」M,看起来比较杂乱


🔹 2. 使用 git rebase main

git checkout feature
git rebase main

结果:

A --- B --- C --- D' --- E'

✅ 优点:历史整洁、线性 ❌ 缺点:修改了提交哈希(不适合公共分支)


⚙️ 三、两者的典型使用场景

场景推荐命令
多人协作的公共分支git merge(安全、可追溯)
自己开发的个人分支git rebase(保持干净历史)
在提交 PR 前整理提交git rebase -i
合并别人分支,保留完整过程git merge

⚠️ 四、注意事项

  • rebase 会重写历史,不要在已经推送并被他人使用的分支上执行。
  • merge 安全但历史杂;rebase 优雅但有风险。