Git 压缩多个 commits 提交

语言: CN / TW / HK

分为三步。最简单的:

git rebase -i origin/master

1、 选择提交

1.1、 按个数选择

基本命令:

git rebase -i HEAD~39

其中 39 是你要压缩的提交个数,从最近一次往前数。如果你想压缩没有同步到远程的所有提交,有个简单的方法,直接输入 git status 查看结果:

$ git status
On branch master
Your branch is ahead of 'origin/master' by 39 commits.
  (use "git push" to publish your local commits)

上面结果中的 39 就是我们所需要的个数值。

1.2、 按 hash 值或标签来选择

git rebase -i HEAD~39 需要数个数,还有一种方法是提供选择范围前一个提交的 hash (压缩范围不包括这个提交):

git rebase -i xxyyzz

GIT 的标签可以替代 hash 值,因此下面这样也是可以的,如果要压缩没有同步到远程的所有本地提交,这个是最简单的命令:

git rebase -i origin/master

2、 选择和压缩

这时你的编辑器会有弹窗,显示出你想要合并的提交列表。类似于下面的:

pick xxxxxx done 1
pick yyyyyy done 2
pick zzzzzz done 3

我们需要将除了第一个 pick ,其它的 pick 都改成 s (表示 squash ,压缩)。可以用 vim 的快速替换,然后再把第一个 pick 改回来。

保存文件后直接退出即可。

3、 创建新的提交

现在 GIT 已经把多个提交压缩成一个了,然后弹出提交注释编辑框,默认是所有提交的注释合起来。可以直接编辑,然后保存退出即可。

Q. E. D.