git rebase -i 合并多个commit提交

Quibbler 2020-3-11 982

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看看现在提交是不是合并了,还有哪些提交:



不忘初心的阿甘
最新回复 (0)
    • 安卓笔记本
      2
        登录 注册 QQ
返回
仅供学习交流,切勿用于商业用途。如有错误欢迎指出:fluent0418@gmail.com