Bisect

高度な Git

Amanda Crawford-Adamo

Software and Data Engineer

git bisect とは?

バグを導入したコミットを二分探索で特定するツール

Git Bisect コマンド

git bisect

目的

  1. 悪いコミットを迅速に特定
  2. データデバッグに必須
  3. 根本原因分析を高速化
高度な Git

Bisect - 開始

  1. git bisect セッションを開始

    git bisect start
    
  2. 現在の状態を bad として設定

    git bisect bad
    
  3. 直近の良い状態を指定

    git bisect good <commit-hash>
    

最初の2つのコミットが緑で良いコミット、最後のコミットが赤で既知の悪いコミット。両者の間に良否不明(灰色)のコミットが3つある。最後の良いコミットは git bisect good、悪いコミットは git bisect bad で示される。

高度な Git

Bisect - 検索

  1. 現在のコミットを bad としてマーク

    git bisect bad
    
  2. 現在のコミットを good としてマーク

    git bisect good
    

最初の2つのコミットが緑で良いコミット、最後のコミットが赤で既知の悪いコミット。両者の間に良否不明(灰色)のコミットが3つある。Git bisect は二分探索で中央のコミットから確認し、左または右を次に確認する。

高度な Git

Bisect - 自動検索

自動テストスクリプトを実行して、そのコミットが良いか悪いかを判定します。

git bisect run <script_name>
  • テスト合格ならスクリプトは 0 を返します。
  • 失敗なら 0 以外を返します。

最初の2つのコミットが緑で良いコミット、最後のコミットが赤で既知の悪いコミット。両者の間に良否不明(灰色)のコミットが3つある。Git bisect は二分探索で中央のコミットから確認し、左または右を次に確認する。

高度な Git

Bisect - 結果

Git Bisect 出力例

$ git log
b1a534f が最初の悪いコミットです
commit b1a534f89l2c3d4e5f6g7h8i9j0k1l2m3n4o5p
Author: Jane Doe <[email protected]>
Date:   Thu Mar 14 14:30:00 2024 -0500

Update data transformation logic

git の bisection を終了し、現在の HEAD に戻ります

git bisect reset
高度な Git

git bisect を使うとき

ユースケース

  1. データワークフローのリグレッション特定
  2. テストスクリプトでデバッグを高速化

ヒント

  • git bisect run <test-script> でテストを自動化
  • 説明的なコミットメッセージで追跡を容易に
高度な Git

Let's practice!

高度な Git

Preparing Video For Download...