翻修github上的README.md的時候,每更改一次都是一條新的commit,多修改幾次之後master就拉出長長的一條線,感覺不是很必要,這邊教你怎樣將遠端多筆commits強制合併為一條
這個範例目前僅限於要合併的commits位於尾端,至於要怎樣整合中間的commits這個我現在git還不夠熟,不敢亂測…
Step 1
git branch squash
先開一個新的分支來儲存我們目前master所做的修改」
Step 2
git log
看一下log檔,找出想要倒回去的時間點,以這個例子來說是154b5d
commit 154b5d78bcbab2b4513ba02c0104cf45422d6c8a
Author: PG <smartPG@gmail.com>
Date: Fri Dec 7 15:08:18 2012 -0800
Initial commit
Step 3
git reset --hard 154b5d
強制reset
Step 4
git checkout squash
checkout之前儲存的分支
Step 5
git rebase -i master
將目前的squash分支接到master上
Step 5-1
此時會叫出編輯器畫面顯示出squash分支與master領先的commits,讓你選擇如何合併commits,commits出現順序是從舊的到新的,也就是說最新的commit會出現在編輯器最下面
pick e5ca022 a
pick 1e4fcd3 b
pick 796bef9 c
pick 7897670 d
pick d0b99a9 e
將內容改成以下形式後,存檔離開
pick e5ca022 a
s 1e4fcd3 b
s 796bef9 c
s 7897670 d
pick d0b99a9 e
這代表我們要把commit b, c, d合併到commit a,完成合併之後僅會留下commit a與commit e
Step 5-2
接下來會出現若干次編輯器畫面,讓你輸入修改後的commit訊息
# This is a combination of 4 commits.
# The first commit's message is:
squash a~d test
# This is the 2nd commit message:
# This is the 3rd commit message:
# This is the 4th commit message:
這邊主要是讓你看一下你選擇合併的commit記錄,並輸入新的commit 訊息,所有#開頭的行並不會被算到commit訊息裡面
我輸入squash a~d test並刪除多餘的訊息,合併就完成了
Step 6
git checkout master
回到master分支
Step 7
git merge squash
合併squash分支
Step 8
git push --force origin master
強制更新遠端的master