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
弹出的编辑应该是下面这个样子:
你会看到需要处理的commits的列表。对于打算保留的commit,我们可以是用 pick
(这是默认行为), 而对于需要被合并的提交,将前面的 pick
改为 squash
即可。不过,至少要有一个 pick
或者和 pick 效果想同的操作(即最终合并进去的目的地)。
从上图其实也可以看出,我们在这个阶段能用的操作还有很多:
- pick
- reword
- edit
- squash
- fixup
- exec
不同命令的效果,在编辑器里是会有有提示的。比如我在合并的同时,需要修改 commit message,我的做法就是用 reword
代替 pick
: