二進位制搜尋(git bisect)

git bisect 允許你使用二進位制搜尋找到引入錯誤的提交。

首先,通過提供兩個提交引用來平分會話:錯誤之前的良好提交,以及錯誤之後的錯誤提交。通常,糟糕的提交是 HEAD

# start the git bisect session
$ git bisect start

# give a commit where the bug doesn't exist
$ git bisect good 49c747d

# give a commit where the bug exist
$ git bisect bad HEAD

git 啟動二進位制搜尋:它將修訂版拆分為一半並將儲存庫切換到中間版本。檢查程式碼以確定修訂是好還是壞:

# tell git the revision is good,
# which means it doesn't contain the bug
$ git bisect good

# if the revision contains the bug,
# then tell git it's bad
$ git bisect bad

git 將繼續根據你的指示對每個剩餘的錯誤修訂子集執行二進位制搜尋。git 將提供單個修訂版,除非你的標記不正確,否則將完全代表引入錯誤的修訂版。

之後記得執行 git bisect reset 來結束 bisect 會話並返回 HEAD。

$ git bisect reset

如果你有可以檢查錯誤的指令碼,則可以使用以下命令自動執行該過程:

$ git bisect run [script] [arguments]

其中 [script] 是指令碼的路徑,[arguments] 是應該傳遞給指令碼的任何引數。

執行此命令將自動執行二進位制搜尋,在每一步執行 git bisect goodgit bisect bad,具體取決於指令碼的退出程式碼。退出 0 表示 good,而退出 1-124,126 或 127 表示不良。125 表示指令碼無法測試該修訂版(這將觸發 git bisect skip)。