详解Git 的 rebase 命令使用方法

作者:CG国斌 时间:2023-04-16 16:57:08 

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

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

详解Git 的 rebase 命令使用方法

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

详解Git 的 rebase 命令使用方法

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

详解Git 的 rebase 命令使用方法

接下来,我们使用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文件编辑器:

详解Git 的 rebase 命令使用方法

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

来源:https://blog.csdn.net/qq_35246620/article/details/124718643

标签:git,rebase,命令
0
投稿

猜你喜欢

  • SQL查询之字段是逗号分隔开的数组如何查询匹配数据问题

    2024-01-21 22:32:08
  • Vue2.0实现购物车功能

    2023-07-02 16:54:22
  • python实现生成字符串大小写字母和数字的各种组合

    2021-02-09 07:33:00
  • Python爬虫实例扒取2345天气预报

    2021-09-27 22:38:12
  • python中setuptools的作用是什么

    2022-01-31 07:19:26
  • 详解微信小程序缓存--缓存时效性

    2024-04-28 10:19:27
  • Pandas 实现分组计数且不计重复

    2022-01-30 03:39:56
  • mysql 实现添加时间自动添加更新时间自动更新操作

    2024-01-14 15:58:59
  • python图书管理系统

    2023-01-30 17:35:48
  • 也谈用户体验

    2009-07-15 12:56:00
  • Python制作exe文件简单流程

    2022-06-07 01:11:12
  • 详解appium+python 启动一个app步骤

    2021-12-19 02:44:55
  • 在VSCode中如何配置Python开发环境

    2023-05-13 22:02:59
  • 聚焦 DreamWeaver MX 2004

    2010-03-25 12:22:00
  • mysql中如何查询数据库中的表名

    2024-01-20 03:07:32
  • Vue+ECharts实现中国地图的绘制及各省份自动轮播高亮显示

    2024-04-27 16:12:40
  • range 标准化之获取

    2023-09-01 05:35:11
  • 关于Python Selenium自动化导出新版WOS(web of science)检索结果的问题

    2022-12-15 02:20:56
  • ASP实例:使用ASP生成图片彩色校验码

    2009-01-20 16:27:00
  • pandas库中 DataFrame的用法小结

    2021-08-11 00:54:01
  • asp之家 网络编程 m.aspxhome.com