本文概述
- 如何调整基准
- 重新设置分支
- Git互动基础
- Git Merge与Rebase
在Git中, 术语rebase被称为将一系列提交或移动到新的基本提交中的过程。重定基非常有益, 它可以在功能分支工作流程的环境中可视化该过程。
合并分支之前, 最好先对其分支进行基础设置。
文章图片
通常, 它是git merge命令的替代方法。合并始终是向前更改的记录。相对而言, rebase是git中令人信服的历史记录重写工具。它一一合并不同的提交。
假设你已在master分支中进行了三次提交, 在名为test的其他分支中进行了三次提交。如果合并, 则它将一次合并所有提交。但是, 如果你重新设置基础, 则它将以线性方式合并。考虑下图:
文章图片
上图描述了git rebase的工作方式。 master分支的三个提交与test分支的提交线性合并。
合并是集成分支机构的最直接方法。它在两个最新的分支提交之间执行三向合并。
如何调整基准 当你在功能分支(测试分支)上进行某些提交, 而在主分支中进行某些提交时。你可以将任何这些分支作为基准。使用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
输出:
文章图片
正如我们在日志历史记录中看到的那样, master分支中有一个新的提交。如果我想重新建立我的test2分支的基础, 该怎么办?请参阅下面的rebase分支方案:
重新设置分支 如果我们有来自不同分支的许多提交, 并希望将其合并到一个。为此, 我们有两个选择, 要么可以合并它, 要么对其重新设置基础。最好重新建立分支机构。
从上面的示例中, 我们已提交到master分支, 并希望将其基于test2分支。让我们看下面的命令:
$ git checkout test2
此命令将使你从主服务器切换到test2分支。
输出:
Switched to branch 'test2.'
现在你在test2分支上。因此, 你可以使用master分支为test2分支重新设置基础。请参阅以下命令:
$ git rebase master
此命令将为test2分支重新设置基础, 并显示为Applying:test2分支上的新提交。考虑以下输出:
【Git Rebase用法】输出:
文章图片
Git互动基础 Git借助Interactive Rebase促进了工作;它是一个强大的工具, 允许对现有提交执行各种操作, 例如编辑, 重写, 重新排序等。 Interactive Rebase只能在当前已签出的分支上进行操作。因此, 在侧边栏设置本地HEAD分支。
可以使用rebase命令调用Git交互式rebase, 只需将-i和rebase命令一起输入即可。 “ i”在这里代表互动。该命令的语法如下:
句法:
$ git rebase -i
它将列出所有可用的交互式选项。
输出:
文章图片
给定输出后, 它将打开带有可用选项的编辑器。考虑以下输出:
输出:
文章图片
当我们执行git Interactive rebase命令时, 它将使用上述输出打开默认的文本编辑器。
它包含的选项在下面列出:
- 挑
- 改写
- 编辑
- 壁球
- 修理
- 执行力
- 打破
- 下降
- 标签
- 重启
- 去
选择(-p):
Pick站在这里, 其中包含提交。提交的顺序取决于变基期间的pick命令的顺序。如果你不想添加提交, 则必须删除整行。
改写(-r):
改写与pick命令非常相似。 reword选项暂停了rebase过程, 并提供了更改提交消息的机会。它不会影响提交所做的任何更改。
编辑:
编辑选项允许修改提交。修改方式是, 可以完全添加或更改提交。我们还可以在rebase继续命令之前进行其他提交。它允许我们将大型提交拆分为较小的提交。此外, 我们可以删除在提交中所做的错误更改。
壁球(-s):
squash选项允许你将两个或多个提交合并为一个提交。它还允许我们编写新的提交消息来描述更改。
修正(-f):
它与壁球命令非常相似。它丢弃了要合并的提交消息。较早的提交消息用于描述这两个更改。
执行(-x):
exec选项允许你对提交运行任意的Shell命令。
中断(-b):
break选项将重新定位停止在正好位置。稍后将继续使用“ git rebase – continue”命令重新设置基准。
掉落(-d):
drop选项用于删除提交。
标签(-l):
标签选项用于用名称标记当前的头部位置。
重置(-t):
重置选项用于将磁头重置为标签。
Git Merge与Rebase 对于git用户来说, 什么时候使用merge命令以及什么时候使用rebase是最常见的令人困惑的问题。这两个命令是相似的, 并且都用于合并由存储库的不同分支进行的提交。
不建议在共享分支机构中使用重定基, 因为重定基过程将创建不一致的存储库。对于个人而言, 重新定基比合并更有用。如果要查看完整的历史记录, 则应使用合并。合并跟踪整个提交的历史记录, 而重新基准则重写一个新的提交历史。
Git rebase命令说是git merge的替代方法。但是, 它们有一些主要区别:
合并 | Git Rebase |
---|---|
合并将在合并时创建最终提交。 | Git rebase在重新基准化时不会创建任何提交。 |
它将所有提交合并为一个提交。 | 它创建提交的线性轨道。 |
它创建了一个图形化的历史记录, 可能难以理解。 | 它创建了易于理解的线性历史记录。 |
合并两个分支是安全的。 | Git“变基”处理严峻的操作。 |
可以在公共和私人分支机构上执行合并。 | 在公共分支机构上使用基础调整是错误的选择。 |
合并将要素分支的内容与master分支集成在一起。因此, 主分支已更改, 要素分支历史记录保持一致性。 | 重新设置master分支可能会影响功能分支。 |
合并保留历史。 | 变基重写历史记录。 |
Git合并会立即显示所有冲突。 | Git rebase一一呈现冲突。 |
推荐阅读
- Git remote用法详解
- Git推送push
- Git拉pull请求
- Git Origin和Master分支
- Git merge和合并冲突
- Git log日志
- Git初始化
- Git索引index解析
- Git ignore用法详解