I have the following problem:
- the version at
master
works fine - the version of the last tag before
master
(saylast
) has a bug - a colleague needs a patch for his
last
revision for that certain bug
Okay. Let's ask our friend git bisect
for the revision that fixed the bug:
git bisect start
git bisect bad last
git bisect good master
But that's not going to work:
Some good revs are not ancestor of the bad rev.
git bisect cannot work properly in this case.
Maybe you mistake good and bad revs?
Any hints to overcome this? Did I miss something in the docs?
As of git 2.7, you can use the arguments --term-old and --term-new.
For instance, you can identify a problem-fixing commit thus:
As you test, say
git bisect fixed
orgit bisect unfixed
as appropriate.Old answer, for versions of git prior to 2.7
Instead of temporarily training yourself to think that bad means good and good means bad, why not create some aliases?
In
~/.gitconfig
add the following:You can start identifying a problem-fixing commit thus:
As you test, say
git bisect-fixed
orgit bisect-unfixed
as appropriate.Git now lets you use
old
andnew
without first defining them. You have to callgit bisect start
without commits as further arguments, then properly start the bisection by callinghttps://git-scm.com/docs/git-bisect#_alternate_terms
This essentially is what @MarcH was suggesting should be implemented.
Git aliases are a good idea, however the terms
fixed
andunfixed
have the same issue thangood
andbad
: you cannot have them be compatible with both regressions and progressions. It's easy to find words which work either way: simply pick them up from the original binary search terminology which is neutral in nature with no preconception of what is good or bad. For instance:With neutral terms like these you can always type:
git bisect-high
(orgit bisect-upper
, orgit-bisect max
,... your choice!) whether you're looking for a regression or a fix.Too bad the git bisect developers could not simply re-use any of the existing terms. The user interface is not git's concern generally speaking: http://stevebennett.me/2012/02/24/10-things-i-hate-about-git/
If you're using
git bisect run
like I have been doing with Perl'sprove
command (which runs automatic tests) you have no chance just to swapgood
andbad
. The success of the tests will be reported as exit code.I have found a valid Bash syntax to negate the exit code of the program run by
git bisect run
:This gave me the first revision to pass the tests run by
prove
.I would just "cheat" git and swap meanings of good <=> bad.
In other words, consider "bad" as something that does not exhibit the problem so this is not the "good" version to base your patch on.
Good and bad are pretty subjective concepts anyway, right? :)