這裏有一個 Git 倉庫,其提交歷史如下:
最近三條提交都是在update test.md
,現在想將其合併爲一條:
用git rebase
可以實現,具體命令爲:
git rebase -i <startpoint>
startpoint
是一個 commit id,命令將處理(startpoint, HEAD]
區間內的所有 commit,這個區間要包含想要合併的三條記錄,所以startpoint
爲159ab49d
:
鍵入:
git rebase -i 159ab49d
會出現如下內容:
按i
進入編輯模式,在將要處理的 commit 中將後兩個pick
改爲s
:
按esc
,然後按:wq
寫入並退出。之後會顯示如下內容:
按i
進入編輯模式,將後兩個update test.md
信息刪除:
按esc
,然後按:wq
寫入並退出。命令行輸出Successfully rebased and updated refs/heads/main.
之類的信息,說明成功了。看看 commit:
三個 commit 合併成了一個。
- 命令中
-i
的意思是--interactive
,即彈出編輯界面讓用戶編輯完成 rebase 操作。 pick
表示保留 commit。s
是squash
的縮寫,表示“壓縮” commit,後兩個 commit 標記爲s
,表示將後兩個 commit 逐個“壓縮”到前面的 commit(即第一個 commit)。- 如果你用
git push
推送失敗,可以試試git push -f
強制(!)推送。 - 文中的 commit 曲線圖由 VSCode 擴展 Git Graph 展示。
不時會在 GitHub 看到這樣的提交信息:
怎麼做到的?
現在,在倉庫中創建三個 MarkDown 文件,並提交更改:
確定startpoint
爲414396d7
:
鍵入:
git rebase -i 414396d7
編輯 commit:
編輯 commit 信息:
推送到 GitHub 後: