On January 20, 2018 2:15 AM, Junio C Hamano wrote: > "Randall S. Becker" <rsbecker@xxxxxxxxxxxxx> writes: > > > I’m still a bit perplexed by some behaviour seen today, and am looking > > for a clean way to deal with it that the documentation does not make > > clear. So, I’m asking in a different way. Suppose a graph of > > > > A---B---C---D---E > > \ \ / > > \----F—G----/ > > > > An ASCII art that is not drawn for fixed-width font is by definition > understandable only by the person who drew it X-<. I am guessing that F is a > child of both A and B (but I am not sure, as I do not see a reason why it > should even be a merge to begin with, so my guess is likely to be wrong), and > E is a merge between D and G. My bad... outlook... and user. > > IOW, I am guessing that the below is the equivalent of what you drew for > those who look at the picture in fixed-width font: > > A---B---C---D---E > \ \ / > .---F-------G As unintelligible, X-<, but you are probably correct. > > When trying to perform a format-patch from B to E, I was seeing > > commits B-A-F-G-E rather than what I wanted B-C-D-E. > > Assuming that E is a merge, format-patch output should not show E anyway > (i.e. think in terms of "git log --no-merges --reverse", instead of fearing that > format-patch is somehow more magical---it is not). So if you want to show > the comit B, C and D (meaning three patches, i.e. "diff A B", "diff B C", and > "diff C D"), then you would do "format-patch A..D", not "format-patch A..E". > If you meant that you are not interested in the change between A and B, > then the range would be "B..D" instead of "A..D". Ending the range at "E" > means you want to see what is reachable from E, and unless you say you are > not interested in G, you would get G, if you only say you are not interested in > A (or B), as G is not reachable from A (or B). While the end point, E was the same regardless of which path, I was interested in submitting the patches along B..E. A is the parent of B and F and was included in the format-patch, which then forward through F and G then E. > It is unclear how you told format-patch when "trying to perform a format- > patch from B to E" from your description, but if you said "format-patch > A^..E", it is likely that you would have seen all commits in the depicted part > of the graph except for merge commits. That seems to be the case. I used format-patch B..E with no other args. A was not specified but got drawn in. D-E was a merge so is that why that path wasn't selected? I'd still like to be able to include merges - is that a dream?