# Git Bisect 二分查找指南## 1. 基本原理(ASCII示意圖)
假設提交歷史是一條時間線,G=good(正常),B=bad(異常):
提交順序: G --- G --- G --- B --- B --- B | | | 初始正常 首次出錯 當前異常
git bisect 會通過二分法快速定位中間的 B。## 2. 完整操作流程### 步驟1:啟動并標記范圍
```bash
# 啟動二分查找
git bisect start# 標記當前提交為異常(bad)
git bisect bad# 標記已知正常的舊提交(例如1周前的版本)
git bisect good a1b2c3d
Git會自動計算出中間提交并檢出到工作區。
步驟2:測試中間提交
檢查當前代碼狀態:
- 如果正常:
git bisect good
Git會繼續在后半部分查找(提交4-6)。
- 如果異常:
git bisect bad
Git會繼續在前半部分查找(提交1-3)。
步驟3:重復直到定位
最終Git會輸出:
abcdef1 is the first bad commit
commit abcdef1
Author: xxx
Date: xxx錯誤提交的描述...
3. 自動化測試(高級用法)
編寫測試腳本(如 test.sh):
#!/bin/sh
# 測試通過返回0,失敗返回1
npm test
運行自動化測試:
git bisect run ./test.sh
4. 關鍵點總結
- 適用場景:適合代碼歷史較長(如100+提交)的問題定位
- 效率:1000次提交僅需約10次測試(2^10=1024)
- 注意事項:
- 確保測試結果準確
- 結束后務必執行
git bisect reset
- 測試腳本應具有明確的狀態返回值