二进制搜索(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)。