W dniu 20.02.2017 o 08:38, Oleg Taranenko pisze: >>>> Then you must adjust your definition of "good": All commits that do not have >>>> the feature, yet, are "good": since they do not have the feature in the >>>> first place, they cannot have the breakage that you found in the feature. >>>> >>>> That is exactly the situation in your original example! But you constructed >>>> the condition of goodness in such a simplistic way (depending on the >>>> presence of a string), that it was impossible to distinguish between "does >>>> not have the feature at all" and "has the feature, but it is broken". >>> >>> Johannes, thank you for correctly identifying the error in my logic. >>> Indeed I was using the term 'bad' also for the commit without the >>> feature. In order to find the commit introducing the bug in my example >>> a new state is needed, which would make 'git bisect' a bit more >>> complicated than the user 'most of the time' probably needs. Or do you >>> think, it would make sense to ask the user for this state (if e.g 'git >>> bisect' would be started with a new parameter)? > >> If a commit doesn't have the feature, then it is by definition, not >> containing a broken feature, and you can simply use the "good" state. >> There is no need for a different state. If you can't test the commit >> because it's broken in some other way, you can use "git bisect skip" >> but that isn't what you want in this case. > > Commits missing feature == 'good' commit is a very confusing one. Nowadays you can change the names for 'old' and 'new' with `git bisect terms`. HTH. > Looks like in real life it happens much often, then git developers can > imagine. For multi-branch/multi-feature workflow it's pretty easy not > to recognize whether it is missing or not developed yet, especially on > retrospective view where cherry-picking/squashing/merging is being > used. My experience shows most annoying bugs are generating after a > heavy merge (evil merge) with conflicts resolutions, where developer > is not involved in the knowing what happens on counterpart changes. > Then feature can be disappeared after it was worked & tested in its > own branches. Good to know about this problem. > @Alex, I'm pretty interesting in fixing this weird bisect behaviour as > well, as far as I struggled on it last summer and continue struggling > so far :) If you want we can join to your efforts on fixing. Anyway, I don't think it is feasible to weaken the assumption that there is only one transition from 'old' ('good') to 'new' ('bad'); this is what allows O(log(N)) operations. See bisection method of root finding, that is finding zeros of a continuous function. Best, -- Jakub Narębski