在很多时候我们并不需要进行git rebase变基操作; 本人遇到的两个场景:合并多个commit、修改commit信息
git rebase基本命令
git rebase -i
其中-i的意思是—interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)
git rebase -i --root // 回到根提交节点进行互动git rebase -i HEAD~1 // 回到上一个提交节点进行互动git rebase -i HEAD~6 // 回到上6个提交节点进行互动git rebase -i commitId // 回到指定提交节点进行互动
git rebase —continue
继续你的变基础操作,直到操作完成
git rebase —abort
终止当前的变基操作
git rebase master
在dev分支上执行git rebase master,意味着将dev上新增的提交移植到master分支上; 类似于gie merge master将master分支新增内容合并到当前开发分支; rebase不同于merge在于可以线性呈现commit记录
D---E feature/A---B---C master// merge* 6fa5484 (HEAD -> master, feature) commit F* 875906b Merge branch 'master' into feature|\| | 5b05585 commit E| | f5b0fc0 commit D* * d017dff commit C* * 9df916f commit B|/* cb932a6 commit A// rebase* 74199ce (HEAD -> master, feature) commit F* e7c7111 commit E* d9623b0 commit D* 73deeed commit C* c50221f commit B* ef13725 commit A
合并多个commit
git rebase -i HEAD~6 // 执行该命令后得到下图交互编辑窗口Commands:# p, pick <commit> = use commit(使用当前commit)# r, reword <commit> = use commit, but edit the commit message(改变commit message)# e, edit <commit> = use commit, but stop for amending(编辑commit作者等信息)# s, squash <commit> = use commit, but meld into previous commit(融入先前的commit)# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous(放弃此提交的日志消息)# commit's log message, unless -C is used, in which case# keep only this commit's message; -c is same as -C but# opens the editor# x, exec <command> = run command (the rest of the line) using shell# b, break = stop here (continue rebase later with 'git rebase --continue')# d, drop <commit> = remove commit(移除commit)# l, label <label> = label current HEAD with a name# t, reset <label> = reset HEAD to a label# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]// 编辑需要合并到commit完成后,按下esc键,wq保存退出
git rebase修改commit作者信息
// 回到原始commit节点,进行编辑git rebase -i --root// 这时候会进入文档编辑界面, 把pick 改为 edit,然后保存、退出pick <commit-id> add xxx// 然后输入这个命令,修改每个节点的author信息git commit --amend --author "xxx <[email protected]>// 保存当前操作,继续下一个修改,直到所有节点修改完毕git rebase --continuegit commit --amend --author="keli <15302737418@163.com>"// 所有commit作者信息修改完毕进行push操作,覆盖远程分支git push -u -f
