Git - Rebase命令

Git - Rebase命令 首页 / Git入门教程 / Git - Rebase命令

在Git中,术语rebase被称为将一系列提交或移动到新的基本提交中的过程。Rebasing非常有益,它可以在功能分支工作流程的环境中可视化该过程。

在合并分支之前,最好先对其进行重新Rebase。

Git Rebase

通常,它是git merge命令的替代方法。合并始终是向前更改的记录。相对而言,rebase是git中令人信服的历史记录重写工具。它一一合并不同的提交。

假设您在master分支中进行了三次提交,在另一个名为test的其他分支中进行了三次提交。如果您合并,则它将一次合并所有提交。但是,如果您重新Rebase,则它将以线性方式合并。考虑下图:

Git Rebase

上图描述了git rebase的工作方式。 master分支的三个提交与test分支的提交线性合并。

合并是集成分支机构的最直接方法。它在两个最新的分支提交之间执行三向合并。

Git Rebase

当您在功能分支(测试分支)上进行某些提交,而在主分支中进行某些提交时。您可以将任何这些分支作为基础。使用git log命令跟踪更改(提交历史记录)。签出到要重新设置基准的所需分支。现在执行rebase命令,如下所示:

语法:

$git rebase <branch name>

如果分支中有一些冲突,请解决它们,然后执行以下命令以继续更改:

$ git status

用于检查状态,

$git rebase --continue

上面的命令用于继续所做的更改。如果要跳过更改,可以按以下步骤跳过:

$ git rebase --skip

重新定标完成后。将资源库推到原点。考虑以下示例以了解git merge命令。

假设您正在使用分支 test2 。您现在位于test2分支上,并对项目的文件 newfile1.txt 进行了一些更改。

将此文件添加到存储库:

$ git add newfile1.txt

现在,提交更改。使用以下命令:

$ git commit -m "new commit for test2 branch."

输出将如下所示:

[test2 a835504] new commitfor test2 branch
 1 file changed, 1 insertion(+)

将分支切换为主节点:

$ git checkout master

输出:

Switched to branch 'master.'
Your branch is up to date with 'origin/master.'

现在您在master分支上。 newfile.txt 说,我已将更改添加到我的文件中。以下命令用于将文件添加到存储库中。

$ git add newfile.txt

现在提交文件进行更改:

$ git commit -m " new commit made on the master branch."

输出:

[master 7fe5e7a]  new commit made on master
 1 file changed, 1 insertion(+)
HiMaNshU@HiMaNshU-PC MINGW64 ~/Desktop/GitExample2 (master)

要检查日志历史记录,请执行以下命令。

$ git log --oneline

输出:

Git Rebase

正如我们在日志历史记录中看到的那样,master分支中有一个新的提交。如果我想重新建立test2分支的基础,该怎么办?请参阅下面的rebase分支方案:

Rebase Branch

如果我们有来自不同分支的许多提交,并希望将其合并到一个。为此,我们有两个选择,要么合并它,要么对其重新Rebase。

从上面的示例中,我们已提交到master分支,并希望将其基于test2分支。让我们看下面的命令:

$ git checkout test2

此命令将使您从主服务器切换到test2分支。

输出:

Switched to branch 'test2.'

现在您在test2分支上。因此,您可以使用master分支为test2分支Rebase。请参阅以下命令:

$ git rebase master

此命令将为test2分支Rebase,考虑以下输出:

Git Rebase

Git Interactive Rebase

Git借助Interactive Rebase是一个强大的工具,它允许对现有提交进行各种操作,例如编辑(edit),重写(rerite),重新排序(reorder)以及更多操作。 Interactive Rebase只能在当前已签出的分支上进行操作。因此,在侧边栏设置本地HEAD分支。

可以使用rebase命令调用Git交互式rebase,只需将 -i 与rebase命令一起键入即可。这里的" i "代表互动。该命令的语法如下:

语法:

$ git rebase -i

它将列出所有可用的交互式选项。

Git Rebase

给定输出后,它将打开带有可用选项的编辑器。考虑以下输出:

Git Rebase

当我们执行git Interactive rebase命令时,它将使用上述输出打开默认的文本编辑器。

它包含的选项在下面列出:

  • Pick
  • Reword
  • Edit
  • Squash
  • Fixup
  • Exec
  • Break
  • Drop
  • Label
  • Reset
  • Merge

以上选项使用git-rebase执行其特定任务。让我们简要地了解每个选项。

Pick (-p)       -  Pick站在这里,其中包括提交。提交的顺序取决于变基期间的pick命令的顺序。如果您不想添加提交,则必须删除整行。

Reword(-r)  -  Reword与pick命令非常相似。 reword选项暂停了rebase过程,并提供了更改提交消息的机会。它不会影响提交所做的任何更改。

Edit(-e)         -  编辑选项允许修改提交。修改方式是,可以完全添加或更改提交。我们还可以在rebase继续命令之前进行其他提交。

Squash(-s)  -  squash选项允许您将两个或多个提交合并为一个提交。它还允许我们编写新的提交消息来描述更改。

Fixup(-f)       -  它与壁球命令非常相似。它丢弃了要合并的提交消息。较早的提交消息用于描述这两个更改。

Exec(-x)        -  exec选项允许您对提交运行任意的Shell命令。

Break(-b)      -  break选项将重新定位停止在正好位置。稍后将使用" git rebase --continue "命令继续进行基础调整。

Drop(-d)        -  drop选项用于删除提交。

Label(-l)         -  标签选项用于用名称标记当前的头部位置。

Reset(-t)        -  重置选项用于将磁头重置为标签。

Merge与Rebase

对于git用户来说,什么时候使用merge命令以及什么时候使用rebase是最常见的令人困惑的问题。这两个命令是相似的,并且都用于合并由存储库的不同分支进行的提交。

不建议在共享分支机构中使用Rebasing,因为Rebasing过程将创建不一致的存储库。对于个人而言,rebasing比merging更有用。如果要查看完整的历史记录,则应使用合并。合并跟踪整个提交的历史记录,而重新基准则重写新的提交历史。

Git rebase命令说是git merge的替代方法。但是,它们有一些主要区别:

Git Merge Git Rebase
在合并时创建最终提交。 Git Rebase不会创建任何提交。
它将所有提交合并为一个提交。 它创建了一条线性的提交轨迹。
它创建了一个图形化的历史记录,可能难以理解。 它创建了易于理解的线性历史记录。
合并两个分支是安全的。 Git的"rebase"处理了严重的操作。
可以在公共和私人分支机构上进行合并。 在公共分支机构上使用基础调整是错误的选择。
合并将功能分支的内容与主分支集成在一起。 重新设置master分支可能会影响功能分支。
合并保护区历史。 Rebasing重写历史记录。
Git合并会立即显示所有冲突。 Git rebase一对一呈现冲突。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

DDD实战课 -〔欧创新〕

架构实战案例解析 -〔王庆友〕

检索技术核心20讲 -〔陈东〕

OAuth 2.0实战课 -〔王新栋〕

WebAssembly入门课 -〔于航〕

陶辉的网络协议集训班02期 -〔陶辉〕

手把手带你写一个Web框架 -〔叶剑峰〕

网络排查案例课 -〔杨胜辉〕

结构学习力 -〔李忠秋〕

好记忆不如烂笔头。留下您的足迹吧 :)