详解Git 的 rebase 命令使用方法

 更新时间:2022年05月12日 15:15:56   作者:CG国斌  
这篇文章主要介绍了Git 的 rebase 命令使用方法,接下来,我们使用rebase命令,其命令一般形式为git rebase feature,即表示在 master 分支上执行rebase命令,将 feature 分支的代码合并到 master 分支,本文给大家介绍的非常详细,需要的朋友可以参考下

在基于 Git 的开发过程中,我们很容易遇到合并代码的情况,例如我们从 master 分支拉取了一个 feature 分支,当我们开发到一段时间之后,可能需要将 master 的代码合并到我们当前的 feature 分支之中。

这时,我们有两个选择,一个是使用git merge命令,一个是使用git rebase命令,这两个命令都是用来合并代码的,但却有一些差异。在本文中,我们主要讲述git rebase命令的使用方法,也会简单介绍这两个命令的差异。

fork_master

如上图所示,我们从 master 分支拉取了一个名为 feature 的分支,并且在拉取新分支之后,有过三次提交记录;同时,master 分支在我们拉取 feature 分支之后,也有过两次提交记录。现在我们已经构造了背景,接下来我们合并代码。

merge_master

首次,我们使用merge命令,其命令形式一般为git merge --no-ff master,即表示将 master 的代码合并到 feature 分支,其中--no-ff参数是为了保留 master 分支的提交记录。如上图所示,在使用merge命令进行代码合并之后,Git 会自动创建一个新的 commit 用来表示当前的合并操作,此 commit 记录了 master 代码合并到 feature 分支时产生的所有改动。

rebase_master

接下来,我们使用rebase命令,其命令一般形式为git rebase feature,即表示在 master 分支上执行rebase命令,将 feature 分支的代码合并到 master 分支。如上图所示,在使用rebase命令之后,Git 会合并两个分支的 commit 记录,其规则为「在基准分支上合并目标分支的代码,会将目标分支的提交记录全部前置到基准分支的最新提交记录之前」,就如上面这样,我们在 master 分支上使用了rebase命令之后,Git 将 feature 分支上面的所有 commit 记录都前置到了 master 分支的最新 commit 记录之前。

在这里,需要注意的是:rebase是以 commit 为维度的,按 commit 提交的顺序依次进行合并操作;如果在合并的过程中,某个 commit 遇到了冲突,则需要我们先解决该冲突,然后才能继续进行合并操作。特别地,在我们解决冲突之后,需要使用git add + 冲突文件命令将当前冲突标记为已解决,然后使用git rebase --continue命令继续合并操作。

通过上面的描述,我们能发现mergerebase有一个很明显的差异,那就是当遇到冲突的时候,使用merge命令,我们只需要解决一次冲突即可;使用rebase命令,我们则需要依次解决每一个冲突。

对于 Git 的rebase命令,其除了能进行代码合并之外,还有一个常用的功能,那就是将多个 commit 合并为一个,仍然以上面的 feature 分支为例,我们将其从 master 分支拉取之后,进行了三次提交,现在我们将这三个提交结论合并为一个,其命令一般形式为:

git rebase -i HEAD~N

其中,N为我们需要合并的 commit 记录的数量,因为示例中是三次提交记录,所以在此场景下,将N替换为3即可。

在执行完上面的命令之后,我们会进入vi或者vim文件编辑器:

rebase_test

如上图所示,pick标识了我们的三次提交记录,按i建进入编辑模式,保留第一个pick,然后将后面两个pick修改为s或者f,然后键入:wq保留修改。最后,为了将变更同步到远程分支,我们需要使用git push -f命令,其中参数-f表示强制提交。

到此这篇关于Git 的 rebase 命令使用方法的文章就介绍到这了,更多相关git rebase 命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Git 教程之工作区、暂存区和版本库详解

    Git 教程之工作区、暂存区和版本库详解

    本文主要介绍Git 工作区、暂存区和版本库的知识,这里整理了详细的资料,有需要的小伙伴可以参考下
    2016-09-09
  • IDEA配置leetcode插件的步骤

    IDEA配置leetcode插件的步骤

    这篇文章主要介绍了IDEA配置leetcode插件的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 浅析HTTP3

    浅析HTTP3

    本文简单介绍了HTTP协议,以及介绍了HTTP的成长,不同HTTP解决的问题等方面,详细讲解了HTTP3,感兴趣的小伙伴一起来看看吧
    2021-08-08
  • 访客站点停留时间和页面停留时间的实现方案

    访客站点停留时间和页面停留时间的实现方案

    这篇文章主要介绍了访客站点停留时间和页面停留时间的实现方案,需要的朋友可以参考下
    2015-01-01
  • 关于指令重排现象的两个阶段详解

    关于指令重排现象的两个阶段详解

    这个知识点也是很多人说不清道不明的地方,感觉都知道,说又说不出来。为什么会这样呢?因为这几个字,很容易被当成动词去理解,其实正确的理解是当成名词,即指令重排现象
    2022-01-01
  • 前端开发工具nvim替带VSCode的安装配置

    前端开发工具nvim替带VSCode的安装配置

    这篇文章主要为大家介绍了一款前端开发工具nvim代替VSCode的配置使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 算法系列15天速成 第一天 七大经典排序【上】

    算法系列15天速成 第一天 七大经典排序【上】

    今天是开篇,得要吹一下算法,算法就好比程序开发中的利剑,所到之处,刀起头落
    2013-11-11
  • Mac如何给应用单独设置语言

    Mac如何给应用单独设置语言

    这篇文章主要介绍了Mac如何给应用单独设置语言,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 完美解决浏览器输入http被自动跳转至https问题

    完美解决浏览器输入http被自动跳转至https问题

    很多朋友问小编浏览器输入http被自动跳转至https问题,到底该怎么解决呢,其实解决方法很简单,主要关闭浏览器的HSTS功能就可以了,关于http自动跳转至https的解决方法跟随小编一起看看吧
    2021-05-05
  • 关于IDEA git 只有Commit没有Push的问题

    关于IDEA git 只有Commit没有Push的问题

    这篇文章主要介绍了关于IDEA git 只有Commit没有Push的问题,本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论