一图看懂git merge和git rebase的区别!!

Git 是一个非常流行的版本控制系统,它帮助开发者管理代码的不同版本。在 Git 中,mergerebase 是两种常用的将不同分支的更改合并到一起的方法,但它们在处理方式和结果上有所不同。

Git Merge(合并)

  1. 定义git merge 是将两个或多个开发历史记录合并在一起的操作。
  2. 过程:当你执行 git merge 命令时,Git 会在两个分支之间创建一个新的“合并提交”(merge commit),这个提交会同时指向两个分支的历史点。
  3. 优点
  • 保留了完整的历史记录,可以清晰地看到分支的合并点。
  • 合并操作是不可逆的,不会改变项目的历史。
  1. 缺点
  • 可能会产生多余的合并提交,使得历史记录变得复杂。
  • 合并冲突可能更难以解决,因为它们被合并到了一个单独的提交中。

Git Rebase(变基)

  1. 定义git rebase 是将一系列提交从一个分支上摘下来,然后再应用到另一个分支上的操作。
  2. 过程:执行 git rebase 时,Git 会将当前分支上的提交暂存起来,然后将当前分支指向目标分支的顶部,之后将暂存的提交依次应用。
  3. 优点
  • 可以创建一个更干净、线性的提交历史。
  • 减少了合并提交的数量,使得历史记录更加清晰。
  1. 缺点
  • 变基会改变历史记录,如果不正确使用,可能会导致问题。
  • 变基操作是可逆的,但如果在变基后与其他人共享了分支,可能会引起混乱。

一图总结

A---B---C---D  Topic1 (初始状态)
      \
        E---F---G  Topic2 (初始状态)

使用 git merge Topic2
A---B---C---D---H  Topic1 (合并后的Topic1)
     \            (H 是合并提交)
      E---F---G  Topic2

使用 git rebase Topic2 到 Topic1
A---B---C---D---E'---F'---G'  Topic1 (变基后的Topic1)
                          /
                         E---F---G  Topic2 (E', F', G' 是重新应用的提交)

在上图中,Topic1Topic2 是两个分支,ADTopic1 的提交,EGTopic2 的提交。使用 git merge 会创建一个新的合并提交 H,而使用 git rebase 会将 EFG 重新应用到 D 的顶部,生成 E'F'G'

选择使用 merge 还是 rebase 通常取决于团队的工作流程和个人偏好。在公共分支上,通常推荐使用 merge 以保持历史的完整性,而在特性分支或个人分支上,使用 rebase 可以保持历史的清洁和线性。

综上总结

一图看懂git merge和git rebase的区别!!_历史记录

  • git merge和git rebase都具有合并分支的功能,
    但两者又有不同:
    rebase: 变基: 把一个分支的更改移动到另一个分支上,通常用于保持提交历史的线性和干净
    merge: 合并: 把一个分支的更改合并到另一个分支,合并后的提交会保留原始分支的提交历史
    rebase: 解决完冲突后不会产生额外的commit
    merge: 解决完冲突后会产生一个commit
    图中非常形象的展示了二者的不同,
  • 所以rebase是把main的commit记录给删掉了吗?
  • 回答:不是,变基是以目标分支的commit为基础合并,从而忽略main分支的提交记录。

仁者见仁,智者见智,个人推荐使用merge

  • git rebase 只适合在自己的branch用,不然一直会产生branch垃圾(可以删除解决)
  • 而且如果是团队开发,rebase对团队成员能力要求较高
  • rebase需要提交要遵守黄金法则,要慎重
  • 黄金法则; Never use rebase on public branches,永远不能在一个共享的分支上进行Git rebase操作。