• git中rebase和merge的区别


    介绍

    Merge和Rebase是合并两个分支的操作。都是checkout到某个分支上,然后将别的分支合并(变基)到本分支上。

    注意:本分支(head指向的分支,或者经过checkout后的分支)会变化,而别的分支不会变化

    Merge:

    checkout master (head 指向master分支)
    merge future(将future分支融入master中,future不变,这里有两个情况,之后会介绍)

    Rebase:

    checkout future (head 指向future分支)
    rebase master(将master分支插入到future底部,master不变,future的基座变了,但是指向future的指针不变)
    切记:不能rebase任何分支到主分支上,否则主分支的基座改变,就会篡改历史无法修复

    案例

    我们通过四个案例来区分Merge和Rebase

    我们假设本地仓库中存在两个分支,一个主分支master,一个开发分支futuer

    Merge:

    案例一:主分支没有分叉,在master上merge future后,master会快速指向future的位置(fast-forword),如下图
    在这里插入图片描述

    案例二:主分支有分叉时,在master上merge future后,会在master后添加一个提交(–no-ff),future不变,如下图
    在这里插入图片描述

    Rebase

    案例三:checkout future 后,经过rebase master(在future上rebase master),会将master重新作为future的基座,如下图
    在这里插入图片描述

    切记:不要在公共分支(master)上进行rebase

    案例四:在future上merge master,和案例二情况一样,只是在future上进行(改变future),如下图
    在这里插入图片描述

    异同:

    作用相同

    都是把别的分支合并到自己身上,别的分支不变

    效果不同

    merge:对于自身有分叉的merge(案例二),是将分叉的多次commit合并为一个提交点,然后合并到自身上,自己的提交在前面,别人的合并在后边。
    rebase:是将别的分支作为本分支的基座,自己的提交在后边,方便回退,而且不会多出来一个提交。

    场景不同

    merge:主要用于将自己的功能分支添加到master分支上
    rebase:主要是同步master分支到功能分支,实现与上游的同步,当然也可以选择在功能分支上去merge master分支(无所谓顺序),但是要切记不要在master分支上rebase其他任何分支

    补充

    当本地和远端对应同一条分支时,优先使用Rebase而不是Merge
    比如我们在git中只用pull(默认git fetch + git merge)或在pycharm中使用update project时,会提示使用Merge还是Rebase(注意这里意思在本地master上rebase远端master,可以特例修改master),我们一般选择Rebase,这样的话远端的master会作为本地master的基座,而本地master会被顶到顶部,也方便回退。

  • 相关阅读:
    申请TC交易证书以下4点请注意
    【多光谱与高光谱图像融合:金字塔混洗Transformer】
    互联网大厂女工抑郁症自救指南
    Bored Ape Yacht Club NFT 概览与数据分析
    【文档】开发者常用术语
    Leetcode 392(会) 20注意细节 * 12 151 6 71
    【sklearn】fit()、transform()和fit_transform()的区别
    Windows下,ESP-IDF&ESP-ADF的安装
    把样式直接转化成 Tailwindcss Plugin 吧
    Jenkins自动化部署相关shell命令
  • 原文地址:https://blog.csdn.net/weixin_45746505/article/details/128168657