Skip to main content

用 git squash 合并多个 commit

· 3 min read
Kimi Gao
Fullstack & AI

当同一个功能或 bug 的提交数量过多的时候,可以进行 commit 合并操作,比如如下场景:

我想将前面两个 commit 进行合并,我先找到第三个 commit 的 hash 值(git log 或 glol),执行以下命令:

$ git rebase -i e6c829f

oh-my-zsh: grbi e6c829f

一旦运行了'rebase -i'命令,你所预设的编辑器会被调用,其中含有如下的内容:

上面有命令包括缩写的提示

现在你可以将操作改为'edit'(使用提交,但是暂停以便进行修正)或者'squash'(使用提交,但是把它与前一提交合并),默认是'pick'(使用提交)。你可以对这些行上下移动从而对提交进行重排序。当你退出编辑器时,git 会按照你指定的顺序去应用提交,并且做出相应的操作。

如果指定进行'pick'操作,git 会应用这个补丁,以同样的提交信息(commit message)保存提交。

如果指定进行'squash'操作,git 会把这个提交和前一个提交合并成为一个新的提交。这会再次调用编辑器,你在里面合并这两个提交的提交信息。

我将第二行的pick改成了s,保存后,将会进入下一步:

然后我将 message#2 都删掉了,这样合并的 commit 只有一个记录信息,如果忘记删除,之后也可以执行以下命令再进行修改:

git commit --amend

最后执行:

# or gp -f
git push --force

最终的效果:

参考资料

  1. Git 合并多个 Commit
  2. 7.6 Git 工具 - 重写历史
  3. Git Community Book 中文版:交互式 rebase