git rebase merge区别

merge 与 rebase 的区别

1. merge(合并)

  • 作用:将两个分支的历史合并,生成一个新的合并提交(merge commit)。
  • 优点
    • 保留了分支的历史和分叉结构。
    • 操作简单,适合多人协作。
  • 缺点
    • 历史记录会出现多余的合并节点,日志可能变复杂。

示例:

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

执行 git merge feature 后:

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

G 为 merge commit。


2. rebase(变基)

  • 作用:将当前分支的提交“移动”到目标分支的最新提交之后,重写提交历史。
  • 优点
    • 提交历史更线性、整洁。
    • 更容易理解每次变更。
  • 缺点
    • 会重写历史(提交哈希变化),不适合已推送到远程的公共分支。
    • 操作不当可能导致冲突难以解决。

示例:

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

执行 git rebase master 后:

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

E’、F’ 是新的提交,基于 D 之上。


3. 选择建议

  • merge:适合团队协作,保留分支历史。
  • rebase:适合个人开发或整理提交,保持历史整洁。

4. 常用命令

  • 合并分支:

    git checkout master
    git merge feature
    
  • 变基分支:

    git checkout feature
    git rebase master
    

5. 总结

操作 是否重写历史 是否生成合并提交 历史结构 推荐场景
merge 分叉+合并 团队协作
rebase 线性 个人整理/小团队

注意: 不要对已推送到远程的公共分支做 rebase!

更多