在很多时候我们并不需要进行git rebase变基操作; 本人遇到的两个场景:合并多个commit、修改commit信息

git rebase基本命令

git rebase -i

其中-i的意思是—interactive,即弹出交互式的界面让用户编辑完成合并操作,[startpoint] [endpoint]则指定了一个编辑区间,如果不指定[endpoint],则该区间的终点默认是当前分支HEAD所指向的commit(注:该区间指定的是一个前开后闭的区间)

  1. git rebase -i --root // 回到根提交节点进行互动
  2. git rebase -i HEAD~1 // 回到上一个提交节点进行互动
  3. git rebase -i HEAD~6 // 回到上6个提交节点进行互动
  4. 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记录

  1. D---E feature
  2. /
  3. A---B---C master
  4. // merge
  5. * 6fa5484 (HEAD -> master, feature) commit F
  6. * 875906b Merge branch 'master' into feature
  7. |\
  8. | | 5b05585 commit E
  9. | | f5b0fc0 commit D
  10. * * d017dff commit C
  11. * * 9df916f commit B
  12. |/
  13. * cb932a6 commit A
  14. // rebase
  15. * 74199ce (HEAD -> master, feature) commit F
  16. * e7c7111 commit E
  17. * d9623b0 commit D
  18. * 73deeed commit C
  19. * c50221f commit B
  20. * ef13725 commit A

合并多个commit

  1. git rebase -i HEAD~6 // 执行该命令后得到下图交互编辑窗口
  2. Commands:
  3. # p, pick <commit> = use commit(使用当前commit)
  4. # r, reword <commit> = use commit, but edit the commit message(改变commit message)
  5. # e, edit <commit> = use commit, but stop for amending(编辑commit作者等信息)
  6. # s, squash <commit> = use commit, but meld into previous commit(融入先前的commit)
  7. # f, fixup [-C | -c] <commit> = like "squash" but keep only the previous(放弃此提交的日志消息)
  8. # commit's log message, unless -C is used, in which case
  9. # keep only this commit's message; -c is same as -C but
  10. # opens the editor
  11. # x, exec <command> = run command (the rest of the line) using shell
  12. # b, break = stop here (continue rebase later with 'git rebase --continue')
  13. # d, drop <commit> = remove commit(移除commit)
  14. # l, label <label> = label current HEAD with a name
  15. # t, reset <label> = reset HEAD to a label
  16. # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
  17. // 编辑需要合并到commit完成后,按下esc键,wq保存退出

image.png

git rebase修改commit作者信息

  1. // 回到原始commit节点,进行编辑
  2. git rebase -i --root
  3. // 这时候会进入文档编辑界面, 把pick 改为 edit,然后保存、退出
  4. pick <commit-id> add xxx
  5. // 然后输入这个命令,修改每个节点的author信息
  6. git commit --amend --author "xxx <[email protected]>
  7. // 保存当前操作,继续下一个修改,直到所有节点修改完毕
  8. git rebase --continue
  9. git commit --amend --author="keli <15302737418@163.com>"
  10. // 所有commit作者信息修改完毕进行push操作,覆盖远程分支
  11. git push -u -f