Hegwin.Me

无边落木萧萧下,不尽长江滚滚来。

Git 合并最后若干次提交

Git Squash Last Commits

当人们在本地进行功能开发的时候,有时候完成某一部分功能就会执行一次 git commit,这样子对追溯问题比较方便。但是在一个团队中,小而多的 commits 对团队中的其他人来说并不太友好。因此,当我们最终把代码 push 到服务器上或者合并到主分支时,最好是针对一个task或者story,把零散的提交合在一起。而 squash 就可以帮到我们实现这个目标。

比如说我现在在 push 到服务器之前,把当前分支最后三个commits合并一个commit:

git rebase -i HEAD~3

不过在此之前的话,还是建议设置一下 git 默认的编辑器。我在Ubuntu下的,其默认编辑器是nano,实在是用的不习惯,我这里改成 gvim:

git config --global core.editor "gvim -f"

打完 git rebase -i HEAD~3 弹出的编辑应该是下面这个样子:

git_rebase_squash.webp

你会看到需要处理的commits的列表。对于打算保留的commit,我们可以是用 pick (这是默认行为), 而对于需要被合并的提交,将前面的 pick 改为 squash 即可。不过,至少要有一个 pick 或者和 pick 效果想同的操作(即最终合并进去的目的地)。

从上图其实也可以看出,我们在这个阶段能用的操作还有很多:

  • pick
  • reword
  • edit
  • squash
  • fixup
  • exec

不同命令的效果,在编辑器里是会有有提示的。比如我在合并的同时,需要修改 commit message,我的做法就是用 reword 代替 pick

git-reword-squash.webp

< Back