互動式 Rebase

此示例旨在描述如何在互動模式下使用 git rebase。人們期望人們對 git rebase 是什麼以及它的作用有基本的瞭解。

使用以下命令啟動互動式 rebase:

git rebase -i

-i 選項指的是互動模式。使用互動式 rebase,使用者可以更改提交訊息,以及重新排序,拆分和/或壓縮(合併為一個)提交。

假設你要重新排列最後三次提交。為此,你可以執行:

git rebase -i HEAD~3

執行上述指令後,將在文字編輯器中開啟一個檔案,你可以在其中選擇如何重新設定提交。出於此示例的目的,只需更改提交的順序,儲存檔案並關閉編輯器。這將根據你應用的訂單啟動 rebase。如果你檢查 git log,你將看到你指定的新訂單中的提交。

重寫提交訊息

現在,你已經確定其中一條提交訊息含糊不清,你希望它更具描述性。讓我們使用相同的命令檢查最後三次提交。

git rebase -i HEAD~3

而不是重新排列順序,提交將被重新設定,這次我們將在需要更改訊息的提交中將 pick(預設值)更改為 reword

當你關閉編輯器時,rebase 將啟動,它將停止在你想要重寫的特定提交訊息。這將允許你將提交訊息更改為你想要的任何一個。更改訊息後,只需關閉編輯器即可繼續。

更改提交的內容

除了更改提交訊息之外,你還可以調整提交所做的更改。要做到這一點,只需將 pick 更改為 edit 進行一次提交。Git 將在到達該提交時停止並在暫存區域中提供提交的原始更改。你現在可以通過取消暫存或新增新更改來調整這些更改。

只要暫存區域包含該提交中所需的所有更改,請提交更改。將顯示舊的提交訊息,並且可以對其進行調整以反映新的提交。

將單個提交拆分為多個

假設你已經提交了一個提交但稍後決定將此提交拆分為兩個或更多提交。使用與以前相同的命令,將 pick 替換為 edit,然後按 Enter 鍵。

現在,git 將停止在你已標記為要編輯的提交中,並將其所有內容放入暫存區域。從那時起,你可以執行 git reset HEAD^將提交放入工作目錄。然後,你可以以不同的順序新增和提交檔案 - 最終將單個提交拆分為 n 個提交。

將多個提交壓縮為一個

假設你已經完成了一些工作並且有多個提交,你認為這些提交可能只是一次提交。為此你可以執行 git rebase -i HEAD~3,用適當數量的提交替換 3

這次用 squash 代替 pick。在 rebase 期間,你指示被壓扁的提交將在之前的提交之上被壓扁; 把它們變成一個單一的提交。