我怎么能用git bisect来find第一个好的提交?

我有以下问题:

  • master版本工作正常
  • masterlast )之前的最后一个标记的版本有一个错误
  • 一个同事需要一个修补程序来修补那个bug

好的。 让我们来问问我们的朋友git bisect修复bug的修改:

 git bisect start git bisect bad last git bisect good master 

但是这不起作用:

一些好的转速不是糟糕的转速的祖先。
在这种情况下,git bisect无法正常工作。
也许你错误的好转和坏转?

任何提示要克服这个? 我错过了文档中的东西吗?

从git 2.7开始,你可以使用参数–term-old和–term-new。

例如,您可以确定一个问题修复提交:

 git bisect start --term-new=fixed --term-old=unfixed git bisect fixed master git bisect unfixed $some-old-sha1 

在你testing的时候,说一下git bisect fixed或者git bisect unfixed

旧的答案,2.7版之前的git版本

不要临时训练自己去认为坏的意味着好的意味着坏,为什么不创build一些别名呢?

~/.gitconfig添加以下内容:

 [alias] bisect-fixed = bisect bad bisect-unfixed = bisect good 

您可以开始识别问题修复提交:

 $ git bisect start $ git bisect-fixed master $ git bisect-unfixed $some-old-sha1 

正如你testing,说适当的git bisect-fixedgit bisect-unfixed git bisect-fixed

我只是“欺骗”git和交换好<=>坏的意思。

换句话说,把“坏”视为不会出现问题的东西,所以这不是以你的补丁为基础的“好”版本。

无论如何,好的和坏的都是非常主观的概念,对吗? 🙂

 git bisect start git bisect good last git bisect bad master 

如果你使用git bisect run就像我用Perl的prove命令(它运行自动testing)一样,你没有机会只是交换goodbad 。 testing的成功将作为退出代码报告。

我find了一个有效的Bash语法来否定运行git bisect run的程序的退出代码:

 git bisect start git bisect bad HEAD # last revision known to PASS the tests git bisect good $LAST_FAIL_REVISION # last revision known to FAIL the tests git bisect run bash -c "! prove" 

这给了我第一次修改通过prove运行的testing。

Git别名是一个好主意,但是fixedunfixed的术语具有相同的问题,而不是goodbad :你不能让它们兼容回归和进度。 很容易find任何一种工作方式的词汇:只需从原始的二分法search术语中挑选出来,这种术语本质上是中性的,对于什么是好或者不好有什么先入之见。 例如:

 git config --global alias.bisect-high 'bisect bad' git config --global alias.bisect-low 'bisect good' 

用这样的中性术语,你总是可以input: git bisect-high (或者git bisect-upper ,或者git-bisect max ,…你的select!) 无论你是寻找回归还是修复

糟糕的是,git bisect开发人员不能简单地重用任何现有的术语。 用户界面通常不是git的关注点: http : //stevebennett.me/2012/02/24/10-things-i-hate-about-git/

Git现在可以让你使用old ,而不必先定义它们。 你必须调用git bisect start而不需要提交作为进一步的参数,然后通过调用正确地启动二等分

 git bisect old <rev> git bisect new <rev> 

https://git-scm.com/docs/git-bisect#_alternate_terms

这基本上是@MarcHbuild议应该实施的。

Interesting Posts