前言
我们在开发的时候, 有时候可能会提交多个业务零散的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
中找回
本文为作者原创 转载时请注明出处 谢谢
微信公众号二维码如下: