前言
我们在开发的时候, 有时候可能会提交多个业务零散的commit, 这些个commit内容合在一块才算是一个完整的任务
为了使得提交记录美观简洁, 同时缓解强迫症症状, 那么我们需要将这些个commit合并成一个commit
如果你要合并的是最近几次commit, 那么可以使用git reset --soft进行commit撤销处理, 如下:
| 1 | git reset --soft HEAD^3 | 
如果你要合并的是历史中间几次commit, 那么得用到git rebase -i指令了
具体操作
假设我们需要将以下最近两个记录进行合并:
| 1 | commit def5adef853da4cc05752bdb36577c127be71ba5 | 
那么我们执行以下命令:
| 1 | git rebase -i 00b2f59 | 
这里的commit id是需要进行合并commit的前一个, 命令执行后, 会自动打开vim文本编辑器:
| 1 | pick f368015 修复 | 
接下来, 我们需要对该内容进行修改, 首先我们需要来了解几个指令含义:
- pick: 表示保留该commit
- reword: 表示修改该commit的注释
- edit: 表示保留该commit 同时对代码内容进行修改
- squash: 表示将该commit合并到上一个commit
- fixup: 表示将该commit合并到上一个commit同时丢弃该commit注释
- exec: 执行shell
- drop: 删除该commit
这里我们使用squash指令进行合并, 内容修改如下:
| 1 | pick f368015 修复 | 
表示将def5ade合并到f368015
wq内容保存后, 将进入到注释修改编辑页:
| 1 | # This is a combination of 2 commits. | 
我们可以对注释进行选择, 不需要的就用#号注释掉, 或者修改成别内容, 保存后, 直接开始自动合并
合并完毕后, 如果你想撤销合并 返回到合并前的状态, 可以使用以下指令:
| 1 | git rebase --abort | 
通过rebase方式的合并, 会合并生成一个新的commit id, 被合并的commit可以在reflog中找回
本文为作者原创 转载时请注明出处 谢谢
微信公众号二维码如下:

























