Git Rebase17 Mar 2025 | 6 分钟阅读 Rebasing 是将提交重新应用到另一个基础trip上的过程。它用于将来自不同分支的一系列提交应用到最终提交中。它是 git merge 命令的替代方案。它是一个线性的合并过程。 在 Git 中,术语 rebase 指的是将一系列提交移动或组合到新的基础提交的过程。Rebasing 非常有益,它在功能分支工作流程的环境中可视化了该过程。 在合并您的分支之前,最好先对分支进行 rebasing。 ![]() 一般来说,它是 git merge 命令的替代方案。Merge 始终是一个前向更改的记录。相比之下,rebase 是 git 中一个引人注目的历史重写工具。它逐个合并不同的提交。 假设您在您的主分支上进行了三个提交,在名为 test 的其他分支上进行了三个提交。如果合并此分支,它将一次合并所有提交。但是,如果您对其进行 rebasing,它将以线性方式合并。请看下面的图片 ![]() 上图描述了 git rebase 的工作原理。主分支的三个提交与测试分支的提交线性合并。 合并是集成分支的最简单方法。它在两个最新的分支提交之间执行三方合并。 如何进行 Rebase当您在功能分支(测试分支)和主分支上进行了一些提交时。您可以对其中任何一个分支进行 rebase。使用 git log 命令来跟踪更改(提交历史)。签出您要 rebase 的目标分支。现在执行 rebase 命令,如下所示 语法 如果分支中存在一些冲突,请解决它们,并执行以下命令以继续更改 它用于检查状态, 以上命令用于继续您所做的更改。如果您想跳过更改,您可以按如下方式跳过 当 rebasing 完成时。将存储库推送到 origin。请看下面的示例以了解 git merge 命令。 假设您有一个分支,例如 test2,您正在其中工作。您现在位于 test2 分支上,并在项目的 newfile1.txt 文件中进行了一些更改。 将此文件添加到存储库 现在,提交更改。使用以下命令 输出将如下所示 [test2 a835504] new commitfor test2 branch 1 file changed, 1 insertion(+) 将分支切换到 master 输出 Switched to branch 'master.' Your branch is up to date with 'origin/master.' 现在您位于主分支上。我已将更改添加到我的文件,例如 newfile.txt。以下命令用于将文件添加到存储库中。 现在提交文件以进行更改 输出 [master 7fe5e7a] new commit made on master 1 file changed, 1 insertion(+) HiMaNshU@HiMaNshU-PC MINGW64 ~/Desktop/GitExample2 (master) 要检查日志历史记录,请执行以下命令。 输出 ![]() 正如我们在日志历史记录中看到的那样,主分支中有一个新的提交。如果我想对我的 test2 分支进行 rebase,我该怎么做?查看下面的 rebase 分支场景 Rebase 分支如果我们有来自不同分支的许多提交,并希望将其合并到一个提交中。为此,我们有两个选择,我们可以合并它或对其进行 rebasing。最好对您的分支进行 rebasing。 从上面的示例中,我们已提交到主分支,并希望将其重新提交到 test2 分支上。让我们看看下面的命令 此命令将您从 master 切换到 test2 分支。 输出 Switched to branch 'test2.' 现在您位于 test2 分支上。因此,您可以使用主分支对 test2 分支进行 rebase。查看以下命令 此命令将对 test2 分支进行 rebase,并将显示为 Applying: new commit on test2 branch。请看下面的输出 输出 ![]() Git 交互式 RebaseGit 通过交互式 Rebase 提供了便利;它是一个强大的工具,允许对现有提交执行各种操作,如 编辑、重写、重新排序 等。交互式 Rebase 只能在当前签出的分支上操作。因此,将您的本地 HEAD 分支设置在侧边栏中。 可以使用 rebase 命令调用 Git 交互式 rebase,只需在 rebase 命令之后键入 -i 即可。这里的“i”代表交互式。此命令的语法如下 语法 它将列出所有可用的交互式选项。 输出 ![]() 在给定的输出之后,它将使用可用选项打开一个编辑器。请看下面的输出 输出 ![]() 当我们执行 git 交互式 rebase 命令时,它将使用上述输出打开您的默认文本编辑器。 它包含的选项如下
上述选项使用 git-rebase 执行其特定任务。让我们简要了解一下这些选项。 Pick (-p) Pick 在这里表示包含提交。提交的顺序取决于 rebase 期间 pick 命令的顺序。如果您不想添加提交,则必须删除整行。 重述 (-r) 重述与 pick 命令非常相似。重述选项暂停 rebase 过程,并提供了一个更改提交消息的机会。它不会影响提交所做的任何更改。 编辑 (-e) 编辑选项允许修改提交。修改意味着可以完全添加或更改提交。我们还可以在 rebase continue 命令之前进行其他提交。它允许我们将一个大提交拆分成较小的提交;此外,我们可以删除在提交中所做的错误更改。 压缩 (-s) 压缩选项允许您将两个或多个提交合并成一个提交。它还允许我们编写新的提交消息来描述更改。 修复 (-f) 它与压缩命令非常相似。它丢弃了要合并的提交的消息。旧的提交消息用于描述这两个更改。 执行 (-x) 执行选项允许您对提交运行任意 shell 命令。 中断 (-b) 中断选项会在某个位置停止重新设置基线。它将稍后使用'git rebase --continue' 命令继续重新设置基线。 删除 (-d) 删除选项用于删除提交。 标签 (-l) 标签选项用于使用名称标记当前头部位置。 重置 (-t) 重置选项用于将 head 重置为标签。 GitMerge vs. Rebase对于 git 用户来说,何时使用 merge 命令以及何时使用 rebase 命令是一个最常见的难题。这两个命令是相似的,并且都用于合并由存储库的不同分支进行的提交。 不建议在共享分支中使用 Rebasing,因为 Rebasing 过程会创建不一致的存储库。对于个人来说,Rebasing 可能比合并更有用。如果您想查看完整的历史记录,则应使用合并。合并会跟踪提交的整个历史记录,而 rebase 会重写一个新的历史记录。 Git rebase 命令被称为 git merge 的替代方案。但是,它们有一些关键的区别
下一个主题Git Squash |
我们请求您订阅我们的新闻通讯以获取最新更新。