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

慈云数据 2024-05-13 技术支持 79 0

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

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

Git Merge(合并)

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

Git Rebase(变基)

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

一图总结

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' 是重新应用的提交)

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

选择使用 merge 还是 rebase 通常取决于团队的工作流程和个人偏好。在公共分支上,通常推荐使用 merge 以保持历史的完整性,而在特性分支或个人分支上,使用 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操作。
微信扫一扫加客服

微信扫一扫加客服

点击启动AI问答
Draggable Icon