使用 git rebase 合併多個 commit

這裏有一個 Git 倉庫,其提交歷史如下:

img

最近三條提交都是在update test.md,現在想將其合併爲一條:

img

git rebase可以實現,具體命令爲:

git rebase -i <startpoint>

startpoint是一個 commit id,命令將處理(startpoint, HEAD]區間內的所有 commit,這個區間要包含想要合併的三條記錄,所以startpoint159ab49d

img

鍵入:

git rebase -i 159ab49d

會出現如下內容:

img

i進入編輯模式,在將要處理的 commit 中將後兩個pick改爲s

img

esc,然後按:wq寫入並退出。之後會顯示如下內容:

img

i進入編輯模式,將後兩個update test.md信息刪除:

img

esc,然後按:wq寫入並退出。命令行輸出Successfully rebased and updated refs/heads/main.之類的信息,說明成功了。看看 commit:

img

三個 commit 合併成了一個。

  1. 命令中-i的意思是--interactive,即彈出編輯界面讓用戶編輯完成 rebase 操作。
  2. pick表示保留 commit。
  3. ssquash的縮寫,表示“壓縮” commit,後兩個 commit 標記爲s,表示將後兩個 commit 逐個“壓縮”到前面的 commit(即第一個 commit)。
  4. 如果你用git push推送失敗,可以試試git push -f強制(!)推送。
  5. 文中的 commit 曲線圖由 VSCode 擴展 Git Graph 展示。

不時會在 GitHub 看到這樣的提交信息:

img

怎麼做到的?

現在,在倉庫中創建三個 MarkDown 文件,並提交更改:

img

確定startpoint414396d7

img

鍵入:

git rebase -i 414396d7

編輯 commit:

img

編輯 commit 信息:

img

推送到 GitHub 後:

img

ref: 使用 git rebase 合併多次 commit

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章