📅  最后修改于: 2020-12-13 15:28:33             🧑  作者: Mango
重定基调是在另一个基本行程之上重新应用提交的过程。它用于将来自不同分支的一系列提交应用于最终提交。它是git merge命令的替代方法。这是合并的线性过程。
在Git中,术语rebase被称为将一系列提交或移动到新的基本提交中的过程。重定基非常有益,它可以在功能分支工作流程的环境中可视化该过程。
合并分支之前,最好先对其分支进行基础设置。
通常,它是git merge命令的替代方法。合并始终是向前更改的记录。相对而言,rebase是git中令人信服的历史记录重写工具。它一一合并不同的提交。
假设您在master分支中进行了三次提交,在另一个名为test的其他分支中进行了三次提交。如果将其合并,则它将一次合并所有提交。但是,如果您重新设置基础,则它将以线性方式合并。考虑下图:
上图描述了git rebase的工作方式。 master分支的三个提交与test分支的提交线性合并。
合并是集成分支机构的最直接方法。它在两个最新的分支提交之间执行三向合并。
当您在功能分支(测试分支)上进行某些提交,而在主分支中进行某些提交时。您可以将任何这些分支作为基准。使用git log命令跟踪更改(提交历史记录)。签出到要重新设置基准的所需分支。现在执行rebase命令,如下所示:
句法:
$git rebase
如果分支中有一些冲突,请解决它们,然后执行以下命令以继续更改:
$ 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
输出:
正如我们在日志历史记录中看到的那样,master分支中有一个新的提交。如果我想重新建立test2分支的基础,该怎么办?请参阅下面的rebase分支方案:
如果我们有来自不同分支的许多提交,并希望将其合并到一个。为此,我们有两个选择,要么可以合并它,要么对其重新设置基础。重新设置分支机构很好。
从上面的示例中,我们已提交到master分支,并希望将其基于test2分支。让我们看下面的命令:
$ git checkout test2
此命令将使您从主服务器切换到test2分支。
输出:
Switched to branch 'test2.'
现在您在test2分支上。因此,您可以使用master分支为test2分支重新设置基础。请参阅以下命令:
$ git rebase master
此命令将为test2分支重新设置基础,并显示为Applying:test2分支上的新提交。考虑以下输出:
输出:
Git借助Interactive Rebase促进了工作;它是一个强大的工具,允许对现有提交执行各种操作,例如编辑,重写,重新排序等。 Interactive Rebase只能在当前签出的分支上进行操作。因此,在侧边栏设置本地HEAD分支。
可以使用rebase命令调用Git交互式rebase,只需将-i和rebase命令一起输入即可。我在这里代表互动。该命令的语法如下:
句法:
$ git rebase -i
它将列出所有可用的交互式选项。
输出:
给定输出后,它将打开带有可用选项的编辑器。考虑以下输出:
输出:
当我们执行git Interactive rebase命令时,它将使用上述输出打开默认的文本编辑器。
它包含的选项在下面列出:
以上选项使用git-rebase执行其特定任务。让我们简要地了解每个选项。
选择(-p):
Pick站在这里,其中包括提交。提交的顺序取决于变基期间的pick命令的顺序。如果您不想添加提交,则必须删除整行。
改写(-r):
改写与pick命令非常相似。 reword选项暂停了rebase过程,并提供了更改提交消息的机会。它不会影响提交所做的任何更改。
编辑(-e):
编辑选项允许修改提交。修改方式是,可以完全添加或更改提交。我们还可以在rebase继续命令之前进行其他提交。它允许我们将大型提交拆分为较小的提交。此外,我们可以删除在提交中所做的错误更改。
壁球(-s):
squash选项允许您将两个或多个提交合并为一个提交。它还允许我们编写新的提交消息来描述更改。
修正(-f):
它与壁球命令非常相似。它丢弃了要合并的提交消息。较早的提交消息用于描述这两个更改。
执行(-x):
exec选项允许您对提交运行任意的Shell命令。
中断(-b):
break选项将重新定位停止在正好位置。稍后将继续使用“ git rebase –continue ”命令重新设基。
掉落(-d):
drop选项用于删除提交。
标签(-l):
标签选项用于用名称标记当前的头部位置。
重置(-t):
重置选项用于将磁头重置为标签。
对于git用户来说,什么时候使用merge命令以及什么时候使用rebase是最常见的令人困惑的问题。这两个命令是相似的,并且都用于合并由存储库的不同分支进行的提交。
不建议在共享分支机构中使用重定基,因为重定基过程将创建不一致的存储库。对于个人而言,重新合并比合并更有用。如果要查看完整的历史记录,则应使用合并。合并跟踪整个提交的历史记录,而重新基准则重写新的提交历史。
Git rebase命令说是git merge的替代方法。但是,它们有一些主要区别:
Git Merge | Git Rebase |
---|---|
Merging creates a final commit at merging. | Git rebase does not create any commit at rebasing. |
It merges all commits as a single commit. | It creates a linear track of commits. |
It creates a graphical history that might be a bit complex to understand. | It creates a linear history that can be easily understood. |
It is safe to merge two branches. | Git “rebase” deals with the severe operation. |
Merging can be performed on both public and private branches. | It is the wrong choice to use rebasing on public branches. |
Merging integrates the content of the feature branch with the master branch. So, the master branch is changed, and feature branch history remains consistence. | Rebasing of the master branch may affect the feature branch. |
Merging preserves history. | Rebasing rewrites history. |
Git merge presents all conflicts at once. | Git rebase presents conflicts one by one. |