git-rebase命令用法

时间:2024-05-22 15:37:49

命令:

        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 | --show-current-patch

场景: 

          有一条代码线master线,同时有条新需求开发线dev线。master线从B开出分支dev线后,一直在做bug修复(C,D)。如下图:

 

git-rebase命令用法

此时,dev线需要合并master线修复的bug,以免重复开发。那我们可以用到git rebase命令。

执行:git rebase --onto master dev,成功后,dev线就会合并C和D提交的记录。如下图:

git-rebase命令用法

另一种场景:

两条新功能开发线,一条dev,dev1是在dev的基础上开的新分支,可能dev1的代码更稳定,此时需要将dev1改为master的一条分支,同时将master线上修改的代码与dev1进行合并。

git-rebase命令用法

此时,可以执行命令:git rebase --onto master dev dev1,操作成功后,dev1线将有master上的最新代码,同时又包含新开发的功能:

git-rebase命令用法

第三种场景:

git-rebase命令用法

假设现在有一条分支dev1,发现B和C提交的代码有问题,需要把B和C提交的代码去除,那可以执行命令:

git rebase --onto dev1~4 dev1~1 dev1

执行后,B和C将会从dev1分支的提交记录中去除。

git-rebase命令用法

 

git rebase命令主要参数解析:

--onto<newbase>:

newbase指的是需要rebase代码的起点,newbase可以是分支(branch),也可以是任意的提交记录(commit1)。rebase成功后,将以newbase为代码分支起点。

<upstream>:

需要与newbase比对的分支或提交记录。

<branch>:

需要rebase的工作分支。默认为HEAD,例如dev1

--continue

当处理完冲突后,可以使用该命令让rebase继续。

--abort

终止rebase操作,将HEAD设置为rebase之前的分支。如果指定了<branch>,则HEAD将重置为<branch>。否则,HEAD将被重置为rebase之前的分支。

--quit

终止rebase操作,但不会将HEAD重置为原来的分支。index和working tree将不会发生任何改变。

--autostash

在rebase操作之前自动stash当前分支未提交的代码,在rebase操作结束后,自动将stash的记录进行unstash,并与rebase后的代码合并。注意,此操作有可能会导致严重的冲突(conflict),谨慎使用。

-m

--merge

进行rebase操作的时候,同时使用merge进行代码合并。需要注意的是,在进行rebase merge产生冲突的时候,ours为<upstream>指定的分支,theirs为<branch>指定的分支。原因是,rebase merge work的工作原理为,将<branch>上的所有提交记录在<upstream> 分支上进行重提交。