如何使用 git rebase 将多个 commit 合并成一个commit

5,652

使用场景

当我们做一个需求时,由于各种各样的原因就会出现一个问题:同一个需求分成了很多次 commit 提交,而这些提交拼接起来才是一个完整的功能。为了避免太多的 commit 而造成版本控制混乱,提交日志看起来更清晰明了,一般推荐将多个 commit 合并成一个提交。

操作步骤

假设我们做了以下3个commit,而我们想把前两个提交也就是 commit bd61dae 和 commit d9a0c84 合并成一个提交。 image.png

输入命令: git rebase -i commitId 这里的commitId就是想要合并的多个记录之前的一个提交记录commitId,即 3be0e8f 。 image.png 回车 enter 进入 vim 编辑模式 image.png 每行有三部分组成:命令名称 + commit hash + 提交message,# 号开头的则是命令的提示说明。

指令说明 
pick:保留该commit(缩写:p) 
squash:将该commit和前一个commit合并(缩写:s) 

这里将 commit d9a0c84 改为 s 或 squash image.png 之后按 Esc,回到一般模式,你会发现左下角的--插入--不见了。然后输入 :wq 保存退出。

vim 编辑器退出
:q! -> 强制退出不保存
:wq -> 保存后退出
:wq! -> 强制保存后退出

之后会第二次进入vim编辑模式 image.png 将 commit message B 和 commit message C 提交信息删除,重新写提交信息,然后和之前的操作一样保存退出。 image.png 这时输入 git log 查看提交日志,可以看到多个commit已经合并成了一个 image.png

最后

如有理解不对需要改进地方或者自己有其他见解的欢迎在评论区提出哟,希望我们可以一起交流学习。