在很多时候我们并不需要进行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 --continue
git commit --amend --author="keli <15302737418@163.com>"
// 所有commit作者信息修改完毕进行push操作,覆盖远程分支
git push -u -f