二進位制搜尋(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 good
或 git bisect bad
,具體取決於指令碼的退出程式碼。退出 0 表示 good
,而退出 1-124,126 或 127 表示不良。125 表示指令碼無法測試該修訂版(這將觸發 git bisect skip
)。