在
cd82f29
跟
1de2076
這兩個 Commit 都只有各加一個檔案(分別是
cat1.html
跟
cat2.html
),
2bab3e7
跟
27f6ed6
也一樣,都只各加了一個檔案而已。如果想把這幾個 Commit 合併成一個,會讓 Commit 看起來更乾淨一些。同樣可以使用互動模式的 Rebase 來處理:
$ git rebase -i bb0c9c2
接著一樣再次出現 Vim 編輯器視窗,內容如下:
pick 382a2a5 add database settings
pick cd82f29 add cat 1
pick 1de2076 add cat 2
pick ca40fc9 add 2 cats
pick 2bab3e7 add dog 1
pick 27f6ed6 add dog 2
# Rebase bb0c9c2..27f6ed6 onto bb0c9c2 (6 commands)
# Commands:
# ...[略]...
這裡我用的指令是 squash
,把上面的內容修改成這樣:
pick 382a2a5 add database settings
pick cd82f29 add cat 1
squash 1de2076 add cat 2
squash ca40fc9 add 2 cats
pick 2bab3e7 add dog 1
squash 27f6ed6 add dog 2
最後一行的 27f6ed6
會跟前一個 Commit 2bab3e7
進行合併,也就是 add dog 1
跟 add dog 2
這個 Commit 會合在一起。
倒數第三號的 ca40fc9
會跟前一個 Commit 1de2076
合併,但因為 1de2076
又會再往前一個 Commit cd82f29
合併,所以整個跟 cat 有關的這三個 Commit 會併成同一個。
存檔並離開 Vim 編輯器後,它會開始進行 Rebase,而在 Squash 的過程中,它還會跳出 Vim 編輯器讓你編輯一下訊息:
我把訊息改成「add all cats」:
同樣的,在另一次的 Squash 也會再編輯一次 Commit 訊息,我把它改成「add all dogs」。整個 Rebase 的訊息如下:
$ git rebase -i bb0c9c2
[detached HEAD fb79104] add all cats
Date: Sun Aug 20 05:08:25 2017 +0800
4 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 cat1.html
create mode 100644 cat2.html
create mode 100644 cat3.html
create mode 100644 cat4.html
[detached HEAD 803eeac] add all dogs
Date: Sun Aug 20 05:09:53 2017 +0800
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 dog1.html
create mode 100644 dog2.html
Successfully rebased and updated refs/heads/master.
這時候的歷史紀錄就變成這樣了:
這樣就把剛剛那些貓貓狗狗的,全部整理成兩個 Commit 了。
使用 SourceTree
使用 SourceTree 在歷史紀錄上的 Commit 上按滑鼠右鍵,選擇「Rebase children of SHA-1 interactively…」,進入互動模式。這時,我先在 add dog 2
這個 Commit 上按滑鼠右鍵並選擇「Squash with previous commit…」:
接著是在 add cat 2
上做一樣的事:
再來是 add 2 cats
: