On Wed, Nov 22, 2017 at 3:39 PM, Adam Dinwoodie <adam@xxxxxxxxxxxxx> wrote: > In trying to do a bisect on the Git repository, I seem to have come > across surprising behavior where the order in which `git bisect` appears > to forget that previous commits were marked as new. Yeah, the algorithm uses many "old" commits and only one "new" commit. [...] > As you can see, in both cases, only the most recent "new" command > appears to have any effect. I'd have expected that both commits would > have been marked as "new", and the bisect run would use both facts to > work out which commit is the target of the bisection. I didn't look at your test case, but the algorithm to find another commit to test is described here: https://git-scm.com/docs/git-bisect-lk2009.html#_bisection_algorithm and you can see that the first rule of the algorithm is to keep only the commits that are ancestors of the "new" commit (including the "new" commit itself). The reason for this rule is that other commits cannot have introduced the behavior we are looking for. The result of this rule is that git bisect will always ask you to test a commit that is an ancestor of the "new" commit. So if you test a commit that git bisect asks you to test, and it appears that this commit is "new", then you can just discard the previous "new" commit because it will give you less information than the new "new" one. (The old "new" will not let you discard any commits that the new "new" commit allows you to discard, because it is a descendant of the new "new" commit.) If you don't test the commit that git bisect asks you to test, then git bisect assumes that you know better and discards the old "new". > This is using v2.15.0. It's possibly relevant that 95a731ce is a > direct parent of 14c63a9d. > > Is this a bug, or intentional behaviour? Am I missing something that > means it's actually sensible to have Git silently discard some bisect > commands in this sort of circumstance? Well, instead of silently discarding a the old "new" commit when the new "new" commit is not an ancestor of it, git bisect could perhaps warn or ask you to confirm that you know what you are doing.