On 2019-01-10 at 14:29 Junio C Hamano <gitster@xxxxxxxxx> wrote: > > For instance, commit X does this: > > > > -foo(x,y); > > +foo(x,y,z); > > > > Then commit Y comes along to reformat it: > > > > -foo(x,y,z); > > +foo(x, y, z); > > > > And the history / rev-list for the file looks like: > > > > ---O---A---X---B---C---D---Y---E---F > > > > I want to ignore/skip Y and see X in the blame output. > > If you skip Y, the altered history would have "foo(x, y, z)" in E, > "foo(x,y,z)" in X, and "foo(x,y)" in A. If you start blaming from > F, you'd get E as the commit that explains the latest state. If you > do not skip Y, you'd get Y. I am not sure how you'd get X in either > case. The way to do it is to let the blames get passed to Y - don't yank it from the graph. Then when trying to pass the blames from Y to its parent, when we get a diff chunk that Y is responsible for, instead of keeping it on Y's suspect list, we hand the blame_entry to D. That blame_entry will get passed all the way back to X, which also has a diff that touches that line. Basically we do the same blame processing as usual, but just don't let any blames stick to Y. Barret