hua*_*ngw 2 git bash git-bisect
在git中,我们必须bisect方便地找到第一个错误的提交,这样:
git bisect start linux-next/master v2.6.26-rc8
git bisect run make kernel/fork.o
Run Code Online (Sandbox Code Playgroud)
但前提是我知道哪个旧的提交是好的。在此示例中,它是 v2.6.26-rc8。
如果我不知道哪个提交是好的,会发生什么?
是否可以编写一个脚本,反向循环 git 提交,从当前 HEAD 开始,从最新到最旧,并自动测试每个提交,直到第一个好?
git bisect对提交历史记录进行二分搜索。good并bad简单地为该搜索提供边界。然后,Git 在该范围内搜索“坏”提交,而前一个提交“好”。
重要的是“好”提交是在功能损坏之前,“坏”提交是在功能损坏之后。如果您不确定该功能何时损坏,请在引入该功能之前选择一个提交。
如果您不确定,请选择一个非常旧的提交。您甚至可以选择第一个提交。这并不像听起来那么荒谬。二分查找非常高效;只需 log2(10000) 次尝试或 13 次尝试即可搜索 10,000 个提交。
例如,假设您的提交历史记录如下所示。
a - b - c - d - e - f - g - h - i [main]
Run Code Online (Sandbox Code Playgroud)
您知道该功能现在已损坏,您不知道它什么时候好,但您确实知道它是在 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
Run Code Online (Sandbox Code Playgroud)
然后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
Run Code Online (Sandbox Code Playgroud)
Git 假设 f 之后的所有内容也是不好的。那么它可能会尝试d。可以说这很好。
$ git bisect good
HEAD
a - b - c - d - e - f - g - h - i [main]
g g b b
Run Code Online (Sandbox Code Playgroud)
然后它会尝试 e。这么说吧,这很糟糕。
$ git bisect bad
HEAD
a - b - c - d - e - f - g - h - i [main]
g g b b b
Run Code Online (Sandbox Code Playgroud)
e 破坏了这个功能。
| 归档时间: |
|
| 查看次数: |
1192 次 |
| 最近记录: |