git rebase 合并提交
前言
自己做完一个功能觉得没问题后 commit,结果后续可能会持续做些小修改。每次修改就会产生一次 commit。而且很有可能不止一次打回重做,这样就会产生很多的 commit。
合并提交方便 code review:多次提交后的远程会有多条历史记录,并且极有可能中间的一条记录并不是最终的代码,导致 code review 时的混乱
合并提交最好重新拉个分支操作
合并最近n提交记录
语法
git rebase -i HEAD~n
进入合并模式
合并最近三次提交
git rebase -i HEAD~3
然后你会看到一个像下面这样的命令窗口, 它会提示你相关的命令,提交记录按先后顺序从上到下排列
![](https://img2020.cnblogs.com/blog/2196407/202011/2196407-20201118140234641-1202092948.png)
合并操作
若需要合并3次提交为1次,只需要修改前缀命令
![](https://img2020.cnblogs.com/blog/2196407/202011/2196407-20201118142109878-27580111.png)
按ESC
键, 输入:wq
保存并退出 vim,接着就会进入注释comment编辑区
设置commit message
合并完成并保存退出后会显示几次提交记录的提交注释信息
![](https://img2020.cnblogs.com/blog/2196407/202011/2196407-20201118145229914-372579368.png)
再次按ESC
键, 输入:wq
保存并退出 ,会显示以下消息
如果你异常退出了 vi
窗口:
git rebase --edit-todo
修改完保存一下:
git rebase --continue
在中间的过程中你可以随时取消rebase 事务。
git rebase –abort
合并某次提交后的记录
git rebase -i commitId
表示合并某次 commitId 后的记录,不包括commitId
示例: 合并3次提交
开始合并,选择该3条提交的上一条提交记录
git rebase -i 6f9b8ecc
进入vi模式后,在键盘上敲i
键进入insert模式。这时候先看看这里面的东西是什么含义,
- pick 的意思是要会执行这个 commit
- squash 的意思是这个 commit 会被合并到前一个commit
上面参数表示将第二次和第三次提交合并到第一次提交
接着修改合并产生的新提交的备注信息,同上
命令解释
p, pick = 保留该次提交
r, reword = 保留该次提交但修改提交信息
e, edit = 保留该commit, 但我要停下来修改该提交(不仅仅修改注释)
s, squash = 将该提交合并到先前的提交中
f, fixup = 同 “squash”一样, 但丢弃这次的提交信息
x, exec = 执行shell命令
d, drop = 抛弃该次提交
参考文档
http://www.ruanyifeng.com/blog/2015/08/git-use-process.html