快速找出 bug commit
說明
使用 git bisect 語法,藉由定義發生 bug 的 commit 與「沒問題」 commit 的範圍,運用演算法來幫助使用者,有效率找出發生問題的 commit。
原理
當定義了 bug 出現的範圍,git bisect 會跳到範圍的「中間」 commit ,逐步引導使用者來依「當前」所在的 commit 來標記 bad 或 good,若標記為 bad 就會向 good 方向跳,而標記 good 就會向 bad 方向跳,交叉定位到「最初發生問題」的 commit 位置為止。
開始搜尋模式
當 git bisect start 啟動了搜尋模式,系統就會「等待」使用者在不同 commit 標記 「好」or「壞」。
bash
git bisect start
回傳
text
<< status: waiting for both good and bad commits
標記搜尋範圍
標記含 bug 的 commit
bash
git bisect bad
標記沒問題的 commit
bash
git bisect good
回傳
當定義好「好」與「壞」的範圍,系統會說明還有幾個版本需要測試,大約還要幾個步驟。
text
<< Bisecting: 2 revisions left to test after this (roughly 2 steps)
定位到最初的問題 commit
當經過幾次 commit 標記的「好」與「壞」,最後系統會定位出「最初」發生 bug 的 commit 且說明其相關的內容。就可以抓到戰犯了

text
dd177ba7b1f2eb83a1e359960469e5bda0abd8e1 is the first bad commit
commit dd177ba7b1f2eb83a1e359960469e5bda0abd8e1
Author: NaikyDing <74ding@gmail.com>
Date: Mon Nov 14 10:17:01 2022 +0800
feat: bug-1
test.yaml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
結束搜尋模式
已經定位到 bug 的 commit 後,就可以關閉搜尋模式,讓系統將知道已經結束。
bash
git bisect reset
