• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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的意思是要将该指定的提交复制到哪个分支上。

    上篇:git mergetool

    下篇:git tag