git rebase的一点理解

git rebase

rebase这个命令在官方的翻译中意思是:变基。

额,怎么说都有点怪是不是,最后查了几个词典,我觉得把rebase翻译为:重定基底

重定基底有两词语组成:

  • 重定:动词,重新确定的意思
  • 基底:名词,就是依据,把某种事物作为依托或根据,在git中,这个依据的事物就是提交历史

合起来就是:重新确定所依据的提交历史。

为什么要重新确定依据的提交 历史呢?这得先说一下 merge是如何工作的,

git merge

merge是我们常用的合并分支的命令:

假如开发中:分叉到两个不同的分支,右各自有新的提交:
分叉的提交历史。

当我们使用merge命令合并时,它会把两个分支的最新提交历史(C3C4)和这个两个分支的最近的祖先(C2)进行三方合并,合并的结果就是生成一个新的提交历史。

通过合并操作来整合分叉了的历史。

在将三方合并的时候,总是需要以一个提交历史作为依据的,在这个提交历史的基础上增加其他两个的修改,merge上使用的就是这个两个分支的最近的祖先(C2)作为依据。

git rebase

rebase同样是通过合并来整合分叉的历史,唯一的不同就是,合并时所依据的提交历史不同(基),它是直接拿两个分支的最新提交历史(C3C4)中的一个作为依据(即基),比如以C3为基础,提取在 C4 中引入的补丁和修改,然后在 C3 的基础上应用一次。

这个过程就相当于改变C4的基底为C3,并将C4上的修改依序应用于C3 上,生成新的C4', 这个过程就改变了C4的基底,也就是所谓的变基

将 `C4` 中的修改变基到 `C3` 上。

C4 中的修改变基到 C3

git rebase [basebranch][topicbranch] , 以basebranch为基,将topicbranch的修改应用于basebranch上。

$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command

这时experiment分支的提交历史就已经改变了,master分支在experiment分支之后。

现在回到 master 分支,进行一次快进合并。

$ git checkout master
$ git merge experiment
master 分支的快进合并。

此时,C4' 指向的快照就和上面使用 merge 命令的例子中 C5 指向的快照一模一样了。

这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。

区别

无论是通过变基,还是通过三方合并,最后所生成的结果是一样的,只是他们所生成体提交历史不同。

变基:将一个分支的一系列的提交按顺序应用到另一分支上。

三方合并:把两方的最后提交合并在一起。

变基操作的实际是:丢弃一个分支上现有的提交,在另一个分支上新建这些内容但实际上不同的提交。

git rebase使用:https://www.jianshu.com/p/f7ed3dd0d2d8

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 四、 分支开发工作流 现在你已经学会新建和合并分支,那么你可以或者应该用它来做些什么呢? 在本节,我们会介绍一些常...
    常大鹏阅读 2,167评论 3 24
  • 开篇之前,我们来说说Git这个东西。至于Git是个什么东西这种问题,我相信不用我说,点开这篇文章的你应该知道的。但...
    点融黑帮阅读 4,447评论 8 66
  • Git 分支 Git命令大全 对于任何一个文件,在Git内都只有三种状态:已提交(committed),已修改(m...
    carrey001阅读 850评论 0 4
  • 一、Git是什么? 是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常 大的项目版本管理。 Git ...
    名字谁不会取阅读 1,125评论 0 0
  • 注意事项 参考1,图片也来源于该链接;参考2。 变基操作的 实质是丢弃一些现有的提交,然后相应地新建一些内容一样但...
    一江碎月阅读 1,989评论 0 0