简介
最近在看raywenderlich家的Advanced Git,raywenderlich的出的书,我一直挺喜欢的。这本Advanced Git第三章讲了一些关于rebase的拓展操作让我觉得非常的有用。所以在这里记录了一下。
提供一个供练习的git库 https://github.com/CorrectRoadH/git-practice
使用rebase合并commit
如果我们有多个commit时,如果我们想把多个commit合并成一个时
git log --oneline --graph

以这个log为例,我们想把commit 2 与 3 合并成一个commit。
我们就需要rebase -i 到2之前的commit,比如这里为git rebase 20f0d49。
然后我们就进到这样的一个页面。

我们把3的pick改成squash或者s都行,这样3与3的上面那个(2)都会进行合并。

然后退出(esc,
在退出vim之后,又会进到另一个vim。在这里编辑2、3所合并的新commit的commit message。

在这里,我们直接gg、dG,把整个文件清空,然后写上整合2和3的新commit的消息。

继续保存退出。

现在我们看git log。合并完成!

调整commit的顺序

我们想把2与3的位置交换的话
git rebase -i 1的hash
然后进入VIM

交换你想交换的commit的顺序。(比如可以使用dd和p)

然后退出vim就可以了


交换成功!
重写历史commit的消息
同上,直接rebase -i进去,然后修改的commit消息。
在你要重写历史的commit之前把pick改成reword或者 r

然后保存退出vim,接下来进来这里,

这里我们可以直接清空,然后把新的 commit 消息写下。然后保存退出就ok了。
删除指定commit
同上,进入到rebase interact之后,我们把要删的commit前面的pick改成d或者drop之后保存退出就ok了。

总结
rebase通过-i(interact)提供了大量有用的功能,同时非常的好记、好上手。