用法说明
功能:
在另外一个提交的上方重新应用提交,提交包括upstream-HEAD之间的所有提交,提交应用到HEAD上。
命令格式:
git rebase [-i | --interactive] [options] [--exec <cmd>] [--onto <newbase>]
[<upstream> [<branch>]]
- newbase :
- 创建新提交的起始点,如果不指定,则为
upstream
,相当于开始应用提交前执行了git reset --hard <upstream> (或者 <newbase>)
- 创建新提交的起始点,如果不指定,则为
- upstream:
-
不指定,使用配置
branch.<name>.remote 和 branch.<name>.merge
中的值,如:branch.main.remote=origin branch.main.merge=refs/heads/main
-
所有位于
<upstream>...HEAD
之间的提交都会被重新应用,故可以使用git log <upstream>..HEAD
来确认将会被应用的提交有哪些
git log --oneline my-test...HEAD
-
- branch:
- 指定后会在开始应用提交前执行
git checkout <branch>
- 不指定则在保留当前分支
- 指定后会在开始应用提交前执行
简单总结
git rebase
:会将远程跟踪分支的提交重新应用到当前本地分支(newbase = upstream = 远程分支 )git rebase my-test main
: 先切到分支 main,然后应用my-test…main之间的提交到HEAD(new-base=upstream=my-test, branch = main)
应用场景
–onto 移除提交
rebase 前:
E---F---G---H---I---J topicA
执行命令:
git rebase --onto topicA~5 topicA~3 topicA
--onto topicA~5
会使得 reset 到提交 EtopicA~3 topicA
会选取提交H---I---J
结果:
E---H'---I'---J' topicA
F、G 被移除了