假设我有一个小项目,其中包含一个非常快速的测试脚本,并且我只想对所有东西进行二分查找,从初始提交到当前提交。我该如何做呢?
为了澄清,我不想浪费时间去确定哪个提交是好的,哪个提交是坏的,所以我正在寻找一种将最新提交标记为坏的快速方法,将初始提交标记为好的方法。
假设我有一个小项目,其中包含一个非常快速的测试脚本,并且我只想对所有东西进行二分查找,从初始提交到当前提交。我该如何做呢?
为了澄清,我不想浪费时间去确定哪个提交是好的,哪个提交是坏的,所以我正在寻找一种将最新提交标记为坏的快速方法,将初始提交标记为好的方法。
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-all
,git 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
的命令替代。
--first-parent
以避免例如项目合并时出现多个根的问题,并且引用参数"$@"以避免意外的单词分割。 - jthill--first-parent
。我花了一些时间才明白你所说的不想要的单词拆分,但即使使用引号"$@"
,单词也会被拆分:git quick-bisect ./test.sh "ONE TWO THREE"
运行./test.sh ONE TWO THREE
。发生了什么? - Zaz