Skip to content

快速找出 bug commit

圖片出處

說明

使用 git bisect 語法,藉由定義發生 bugcommit 與「沒問題」 commit 的範圍,運用演算法來幫助使用者,有效率找出發生問題的 commit

原理

當定義了 bug 出現的範圍,git bisect 會跳到範圍的「中間」 commit ,逐步引導使用者來依「當前」所在的 commit 來標記 badgood,若標記為 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 標記的「好」與「壞」,最後系統會定位出「最初」發生 bugcommit 且說明其相關的內容。就可以抓到戰犯了

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(-)

結束搜尋模式

已經定位到 bugcommit 後,就可以關閉搜尋模式,讓系統將知道已經結束。

bash
git bisect reset

Reference