Featured image of post 使用互動式 Git Rebase 清理提交歷史記錄Featured image of post 使用互動式 Git Rebase 清理提交歷史記錄

使用互動式 Git Rebase 清理提交歷史記錄

在建立拉取請求之前使用 git rebase -i 指令壓縮、編輯和清理 Git 提交歷史記錄的逐步指南。

介紹

在日常軟體開發過程中,通常會出現混亂的提交歷史記錄,其中充滿了「WIP」、「修復拼字錯誤」或「測試部署」等日誌。

如果將這些提交直接合併到主分支中,則尋找引入特定錯誤的位置或理解新增一行程式碼的原因變得極其困難。

Git 的互動式變基 (git rebase -i) 允許您在建立拉取請求之前清理提交歷史記錄。您可以將多個提交壓縮為一個、編輯提交訊息、重新排序歷史記錄或刪除冗餘變更。本文介紹了利用互動式變基的逐步工作流程。


1.什麼是互動式Rebase?

git rebase -i 是一個命令,用於開啟互動式編輯器螢幕,顯示指定範圍內的提交清單。透過修改此清單中的指令,Git 將這些變更依序套用到您的分支歷史記錄。

核心用例

  • Squash: 將小型中間提交(例如「拼字錯誤修復」)合併為單一乾淨提交。
  • 重寫: 修改提交訊息以符合團隊命名約定。
  • **刪除:**從歷史記錄中完全刪除不必要的提交。
  • 編輯: 在特定提交處暫停變基過程以新增或刪除檔案。

2. 基本逐步工作流程

讓我們看看如何運行變基來清理本地分支。

第 1 步:指定變基範圍

如果您想編輯目前分支上的最後三個提交,請執行:

git rebase -i HEAD~3

若要編輯自您的分支與另一個分支分離以來的所有提交(例如 main),請執行:

git rebase -i main

步驟 2: 配置待辦事項列表

執行該命令將開啟系統的預設文字編輯器(例如 Vim、Nano 或 VS Code),顯示提交清單:

pick a1b2c3d WIP: Started login interface
pick e5f6g7h fixed typo in input
pick i9j0k1l Added login validation

# Rebase a1b2c3d..i9j0k1l onto z9y8x7w
# ...
  • 注意: 提交按時間順序顯示:最舊的在頂部,最新的在底部
  • 更改每行開頭的關鍵字以告訴 Git 如何處理該特定提交。

核心操作命令

命令縮寫行動
選擇佔位符_0按原樣使用提交(預設)。
改写占位符_0使用提交,但编辑提交消息。
編輯佔位符_0使用提交,但暫停變基以編輯文件。
壁球佔位符_0將此提交合併到先前(較舊的)提交並合併訊息。
修復佔位符_0將此提交合併到前一個提交中,並丟棄此提交的訊息。
掉落佔位符_0完全刪除此提交。

實際例子

若要將拼字錯誤修復和驗證提交合併到初始「啟動登入介面」提交中,請如下編輯文件:

pick a1b2c3d WIP: Started login interface
f e5f6g7h
s i9j0k1l
  • e5f6g7h 設定為 fixup (f),這表示它會合併到 a1b2c3d 中,並且其訊息將被丟棄。
  • i9j0k1l 設定為 squash (s),合併到父級中,同時提示您重寫最終組合的提交訊息。

儲存並關閉編輯器以開始變基。

第 3 步:編寫最終提交訊息

如果您選擇 squash,Git 將開啟另一個編輯器畫面來完成組合訊息:

# This is a combination of 2 commits.
# This is the 1st commit message:

WIP: Started login interface

# This is the commit message #2:

Added login validation

將其重寫為乾淨的提交訊息:

feat: Implement login page with validation rules

- Designed form fields for email and passwords.
- Added client-side red border indicators on input validation errors.

儲存並關閉編輯器。 Git 將會套用更改,將三個提交壓縮到一個節點中。


3. 解決 Rebase 期間的衝突

如果發生衝突,Git 會暫停變基並反白顯示衝突行。

  1. 手動解決衝突: 編輯衝突的原始碼檔案以選擇正確的變更。
  2. 暫存變更: 執行 git add <filename> (不要執行 git commit)。
  3. 繼續變基: 運行:
   git rebase --continue

如果您遇到困難或犯了錯誤,請中止整個過程並透過執行以下命令將分支返回到變基前的狀態:

git rebase --abort

4. 變基的黃金法則

雖然 rebase 非常有用,但您必須遵循一項嚴格的準則:

[!警告] **永遠不要對已經推送到其他開發人員正在工作的公共/共用儲存庫分支(例如,主要或開發)的提交進行變基。 **

變基更改提交哈希值。如果將修改後的雜湊值推送到共用分支,則會破壞其他開發人員的本機歷史記錄​​跟踪,從而導致合併衝突和潛在的程式碼遺失。僅變基本地提交或在隔離的拉取請求分支上提交。

結論

使用 git rebase -i 可以讓您將正在進行的工作儲存為小型本地提交,然後在與團隊共享程式碼之前將它們整理為乾淨的功能提交。開始使用互動式變基來保持儲存庫歷史記錄的可讀性。