Bisect

Git 進階

Amanda Crawford-Adamo

Software and Data Engineer

什麼是 git bisect?

用二分搜尋找出引入錯誤的 commit 的工具

Git Bisect 指令

git bisect

目的

  1. 快速找出錯誤的 commit
  2. 資料偵錯的關鍵工具
  3. 加速根因分析
Git 進階

Bisect - 起始

  1. 啟動 git bisect 工作階段

    git bisect start
    
  2. 將目前狀態標記為壞的狀態

    git bisect bad
    
  3. 標記最後一個已知的好狀態

    git bisect good <commit-hash>
    

提交圖:前兩個提交為綠色(良好),最後一個為紅色(已知壞提交)。介於良好與壞提交之間有三個灰色提交(未知)。最後一個良好提交以 git bisect good 標記,壞提交以 git bisect bad 標記。

Git 進階

Bisect - 搜尋

  1. 將目前提交標記為壞提交

    git bisect bad
    
  2. 將目前提交標記為好提交

    git bisect good
    

提交圖:前兩個提交為綠色(良好),最後一個為紅色(已知壞提交)。介於良好與壞提交之間有三個灰色提交(未知)。git bisect 以二分搜尋,先檢查中間的提交,再向左或向右檢查。

Git 進階

Bisect - 自動搜尋

透過執行自動化測試腳本,檢查該提交是好是壞。

git bisect run <script_name>
  • 腳本在測試通過時必須回傳 0。
  • 測試失敗時應回傳非 0 的數字。

提交圖:前兩個提交為綠色(良好),最後一個為紅色(已知壞提交)。介於良好與壞提交之間有三個灰色提交(未知)。git bisect 以二分搜尋,先檢查中間的提交,再向左或向右檢查。

Git 進階

Bisect - 結果

Git Bisect 輸出範例

$ git log
b1a534f is the first bad commit
commit b1a534f89l2c3d4e5f6g7h8i9j0k1l2m3n4o5p
Author: Jane Doe <[email protected]>
Date:   Thu Mar 14 14:30:00 2024 -0500

Update data transformation logic

退出 bisect 流程並回到目前的 HEAD

git bisect reset
Git 進階

何時使用 git bisect

使用情境

  1. 找出資料流程的回歸
  2. 用測試腳本加速偵錯

小訣竅

  • git bisect run <test-script> 自動化測試
  • 撰寫具描述性的提交訊息以利流程
Git 進階

一起來練習吧!

Git 進階

Preparing Video For Download...