git rebase
git rebase
:命令在另一个分支基础之上重新应用,用于把一个分支的修改合并到当前分支。
语法
git rebase [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>] [<upstream> [<branch>]] git rebase [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>] --root [<branch>] git rebase --continue | --skip | --abort | --quit | --edit-todo
- 如果指定<branch>,
git rebase
则在执行其他任何操作之前将执行自动操作git checkout <branch>
。否则它将保留在当前分支上。 - 如果未指定<upstream>,则将使用当前所在分支。<name>.remote和分支。<name>.merge选项中配置的上游,且
--fork-point
假定该选项。如果您当前没有在任何分支上,或者当前分支没有配置上游,那么 rebase 会中止。 - 所有由当前分支提交但不在<upstream>中的更改都保存到临时区域。这与将要显示的一组提交相同
git log <upstream>..HEAD;
或者通过git log 'fork_point'..HEAD
,如果--fork-point
处于活动状态(请参阅--fork-point
下面的说明);或者,如果--root
指定了选项,则git log HEAD
。 - 如果提供了
--onto
选项,则当前分支将重置为<upstream>或<newbase>。这与git reset --hard <upstream>
(或<newbase>)具有完全相同的效果。ORIG_HEAD 被设置为在复位之前指向分支的尖端。 - 之前保存到临时区域的提交按顺序依次重新应用到当前分支。请注意,HEAD 中提交的任何提交与 HEAD ..<upstream>中的提交相同的文本更改均被省略(即,已经接受上游提供不同提交消息或时间戳的补丁将被跳过)。
- 合并失败可能会阻止此过程完全自动化。您将不得不解决任何此类合并失败并运行
git rebase --continue
。另一种选择是绕过导致合并失败的提交git rebase --skip
。要检出原始<branch>并删除.git/rebase-apply工作文件,请改用命令git rebase --abort
。
选项
-i(--interactive)
列出将要重新分配的提交列表。让用户在重新绑定之前编辑该列表。该模式也可用于分割提交。提交列表格式可以通过设置配置选项rebase.instructionFormat进行更改。自定义的指令格式会自动将格式中的长提交哈希值作为前缀。
git rebase -i [startpoint] [endpoint]
其中-i
的意思是--interactive
,即弹出交互式的界面让用户编辑完成合并操作,[startpoint]、[endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支 HEAD 所指向的commit (注:该区间指定的是一个前开后闭的区间)。
--onto
创建新提交的起点。如果没有指定--onto
选项,起点是<upstream>。可以是任何有效的提交,而不仅仅是现有的分支名称。作为特例,如果只有一个合并基础,则可以使用“A ... B”作为 A 和 B 合并基的快捷方式。您最多可以省略 A 和 B 中的一个,在这种情况下,它默认为 HEAD 。
git rebase [startpoint] [endpoint] --onto [branchName]
其中,[startpoint]、[endpoint]仍然和上一个命令一样指定了一个编辑区间(前开后闭),--onto
的意思是要将该指定的提交复制到哪个分支上。