在 git 中,我們必須bisect通過這種方式方便地找到第一個錯誤提交:
git bisect start linux-next/master v2.6.26-rc8
git bisect run make kernel/fork.o
但前提是我知道哪個舊提交是好的。在這個例子中,它是 v2.6.26-rc8。
如果我不知道哪個提交是好的會發生什么?
是否可以撰寫一個腳本,反向回圈 git 提交,從當前 HEAD 開始,從最新到最舊,并自動測驗每個提交,直到第一個好?
uj5u.com熱心網友回復:
git bisect通過提交歷史進行二進制搜索。good并bad簡單地為這個搜索提供邊界。然后,Git 在該范圍內搜索“壞”的提交,而前一個提交是“好”的。
重要的是“好”提交是在功能破壞之前,而“壞”提交是在功能破壞之后。如果您不確定該功能何時中斷,請在引入該功能之前選擇一個提交。
如果您不確定,請選擇一個非常古老的提交。你甚至可以選擇第一個提交。這并不像聽起來那么荒謬。二進制搜索非常有效;僅 log2(10000) 次嘗試或 13 次嘗試即可搜索 10,000 個提交。
例如,假設您的提交歷史看起來像這樣。
a - b - c - d - e - f - g - h - i [main]
你知道這個功能現在已經壞了,你不知道它什么時候好,但你知道它是在 d 引入的。選擇 c,即引入該功能之前的提交,作為“好”提交。
$ git bisect start
$ git bisect bad
$ git bisect good c
HEAD
a - b - c - d - e - f - g - h - i [main]
g b
然后git bisect將進行二進制搜索,d - e - f - g - h直到在一個好的提交之后立即找到一個錯誤的提交。
在這種情況下,它將以 f 開頭。讓我們說這很糟糕。
$ git bisect bad
HEAD
a - b - c - d - e - f - g - h - i [main]
g b b
Git 假設 f 之后的所有內容也很糟糕。然后它可能會嘗試d。讓我們說這很好。
$ git bisect good
HEAD
a - b - c - d - e - f - g - h - i [main]
g g b b
然后它將嘗試 e。讓我們說這很糟糕。
$ git bisect bad
HEAD
a - b - c - d - e - f - g - h - i [main]
g g b b b
e 破壞了該功能。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/495496.html
