将所有东西二分,从最初的提交开始。

21

假设我有一个小项目,其中包含一个非常快速的测试脚本,并且我只想对所有东西进行二分查找,从初始提交到当前提交。我该如何做呢?

为了澄清,我不想浪费时间去确定哪个提交是好的,哪个提交是坏的,所以我正在寻找一种将最新提交标记为坏的快速方法,将初始提交标记为好的方法。

1个回答

12
git bisect start
git bisect good
git bisect bad `git rev-list --max-parents=0 HEAD`
git bisect run ./test.sh

或者将这些命令合并到别名中,例如:

bisect-all = !git bisect start && git bisect bad &&\
        git bisect good `git rev-list --max-parents=0 --first-parent HEAD`

然后只需使用git bisect-allgit bisect run ./test.sh即可。

创建一个别名来处理整个过程略微复杂:

quick-bisect = !sh -c 'git bisect start && git bisect bad &&\
        git bisect good `git rev-list --max-parents=0 --first-parent HEAD` &&\
        git bisect run "$@" && git bisect reset' -

然而,只需运行 git quick-bisect ./test.sh 就可以了。


如果您使用的Git版本早于1.7.4.2,则没有--max-parents选项,因此需要使用类似git rev-list HEAD | tail -n 1的命令替代。


3
也许需要在rev-list命令中添加--first-parent以避免例如项目合并时出现多个根的问题,并且引用参数"$@"以避免意外的单词分割。 - jthill
1
@jthill:谢谢,我添加了--first-parent。我花了一些时间才明白你所说的不想要的单词拆分,但即使使用引号"$@",单词也会被拆分:git quick-bisect ./test.sh "ONE TWO THREE"运行./test.sh ONE TWO THREE。发生了什么? - Zaz
1
如果它在别名中,我认为您可能需要转义引号,否则我不确定。 - jthill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接