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.