一、rebase简介
git rebase 可以对某一段线性提交历史进行编辑、删除、复制、粘贴。合理使用rebase命令可以使提交的历史更干净、简洁!
注意:
不要尝试通过
rebase对任何已经提交到公共仓库中的commit进行修改。只要分支上需要
rebase的所有commits历史还没有被push过,就可以安全地使用git rebase,但请谨慎操作。
**例如:**当在本地仓库中 commit 多次后,在 push 到公共仓库中之前,可以把如下分支B、C、D三个提交记录合并为一个完整的提交,然后再push到公共仓库。
二、操作步骤
2.1 命令简介
git rebase -i [startpoint] [endpoint]
# 或 进行最近的 n 次提交纪录的合并
git rebase -i HEAD~n
- -i:完整表达式为
--interactive,即弹出交互式界面让用户编辑完成合并操作。 - [startpoint]、[endpoint]: 指定了编辑区间(前开后闭),如果不指定 [endpoint] ,则该区间重点默认为当前分支
HEAD所指向的commit。 - HEAD~n:进行最近n次提交记录的合并。
git log # 查看提交历史
git log --oneline # 单行展示提交历史
2.2 具体示例
将 “commit01~04” 合并为 “commit”
命令
# 执行git rebase命令,修改最近4次commit
$ git rebase -i HEAD~4
pick f08e55a commit01
s e70fe26 commit02
s 8849186 commit03
s efc24d0 commit04
# 保存退出后,进入注释修改界面,修改合并后的注释提交即可。
图示
1、执行git rebase 命令 ,选择指令类型
- 未被注释的部分为rebase操作包含的所有提交,commit id前为指令类型
- 指令类型:
- p,pick:保留该commit。
- r,reword:保留该commit,但修改该commit的注释。
- e,edit:保留该commit,但要停下来修改该提交(不仅仅修改注释)。
- s,squash:将该commit和前一个commit合并。
- f,fixup:将该commit和前一个commit合并,但不保留该提交的注释信息。
- x,exec:执行shell命令。
- d,drop:丢弃该commit。
- ...
2、修改提交注释:
3、查看修改结果: