git 三种合并方式(rebase / merge / squash)

问题背景

在使用 Git (分布式版本控制系统),往往不会直接在主分支上面直接开发,而是新建一个分支进行开发。

那么当我们在新分支上面完成一个功能时,便需要合并到主分支。

三种合并

  • merge
  • rebase and merge
  • squash and merge

初始化

diagram-export-2-1-2024-2_03_53-PM

图 1

图1,初始两个分支的状态,现基于此对合并(merge)和变基(rebase)操作讲解。

存在两个分支,当前状态为:

  • master : A -> B -> C -> D -> E
  • feature : A -> B -> C -> F -> H

merge

diagram-export-2-1-2024-2_30_41-PM

图 2

图 2 ,当 master 分支与 feature 分支都存在新的 commit 时,那么在 master 分支使用 git merge feature 会将 master 与 Feature 的最新 commit (E / H) 打包,在 master 分支提交为一个新的 commit (G)。

Rebase

diagram-export-2-1-2024-2_09_32-PM

图 3

图 3 ,当在 feature 分支使用 git rebase master ,会将 feature 分支的变到 master 分支上。

注意:新 commit (F / H) 对比与旧提交,如图3 黄色的部分,其 sha 值不一致,说明 git rebase 是创建了新的提交。 diagram-export-2-1-2024-2_12_06-PM

图 4

图4,当在 master 分支使用 git rebase feature ,会将 master 分支的变到 feature 分支上。

Rebase and merge

diagram-export-2-1-2024-2_14_59-PM

图 5

图 5 是由图 3 ,进行 merge 操作实现的,这是 merge 操作的另一种情况 :当 master 相对于 feature 没有新的提交时,在 master 分支上使用 git merge feature 会直接将 master 分支指向 feature 分支。

Squash and merge

diagram-export-2-1-2024-2_20_24-PM

图 6

squash 顾名思义是压缩,图 6 将 新分支的 commit (F / H) 进行打包压缩在与 master 分支进行 merge 操作。

优缺点

操作优点缺点
merge简单直观
保留完整历史
合并提交冗余
分支历史不够整洁
rebase整洁的分支历史
清晰的提交历史
改变提交历史
容易产生合并冲突
squash清晰的提交历史丢失提交信息
破坏历史信息
  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初原挽风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值