git rebase -i合并commit提交
今天开发就真遇到了要合并多个commit提交,因为自己在开发的时候按照功能细分,一个功能开发一个commit提交。leader review代码的时候觉得提交太多,显得乱,提交划分的不应该这么细。而且review的过程中,前面几笔提交有要修改的地方,这下就很麻烦,需要退回去修改,在重新一笔一笔提交,而且后面的提交中又修改了前面的,也依赖前面要修改的地方。
好家伙,干脆把那几笔细粒度的commit提交合并到一起。辛亏之前看到过怎么合并提交的博客。
1、git rebase -i
使用git rebase -i [startpoint] [endpoint] 命令
git rebase -i [startpoint] [endpoint]
其中-i
的意思是--interactive
,即弹出交互式的界面让用户编辑完成合并操作,[startpoint]
[endpoint]
则指定了一个编辑区间,如果不指定[endpoint]
,则该区间的终点默认是当前分支HEAD
所指向的commit
(注:该区间指定的是一个前开后闭的区间) (引用:rebase 用法小结)
2、举个例子
比如,我有几笔提交:
commit 7c22cef5c5a4c955792972f1f185f255671bd441 (HEAD -> master)
commit 467708ff8564b2ded19a68cf612b8fce3771b5c7
commit f18ef7bd82d84e40101d4b14476b5f4a60c5b4b8 <--合并成一个提交到这里
commit e4e5e79e8d4b218cbf1f3fed0205df6b4378d1af <==所以需要用这个commit id
2.1、git rebase -i
现在想将这三笔提交合并为一个,可以用命令,注意是使用要合并的第一个提交的前一个提交commit ID
git rebase -i e4e5e79e8d4b218cbf1f3fed0205df6b4378d1af
或者用下面的命令:
git rebase -i HEAD~3
进入下面的界面:
2.2、rebase -i可选参数
git 为我们提供了以下几个命令:
- pick:保留该commit(缩写:p)
- reword:保留该commit,但我需要修改该commit的注释(缩写:r)
- edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
- squash:将该commit和前一个commit合并(缩写:s)
- fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
- exec:执行shell命令(缩写:x)
- drop:我要丢弃该commit(缩写:d)
2.3、编辑
按i进入编辑模式,修改:
修改完回车,会再次进入编辑模式,这次是编辑合并三个提交的commit comment:
编辑合并后新提交commit的提交信息,提交之后,git log看看现在提交是不是合并了,还有哪些提交:
精彩的人生需要浪漫、无畏和勇气。