Michael Haggerty <mhagger@xxxxxxxxxxxx> writes: > It seems to me that > > git rev-list --first-parent --ancestry-path A..B > > is well-defined and should list the commits in the intersection between > > git rev-list --first-parent A..B > > and > > git rev-list --ancestry-path A..B > > But in many cases the first command doesn't provide any output even > though there are commits common to the output of the last two commands. > > For example, take as an example the DAG from test t6019: > > # D---E-------F > # / \ \ > # B---C---G---H---I---J > # / \ > # A-------K---------------L--M > > (The merges are always downwards; e.g., the first parent of commit L is > K.) The command > > git rev-list --first-parent --ancestry-path D..J > > doesn't generate any output, whereas I would expect it to output "H I > J". As I do not see how "only show first-parent chains from near the tip but stop immediately when the chain deviates from the ancestry path" could be a sensible operation (in other words, I do not offhand think of examples of what useful things you can do with that information), I actually expect that "-f-p -a-p D..J" should error out, instead of giving no output. You are correct to point out that sometimes -f-p and -a-p _could_ be compatible, e.g. "-f-p -a-p A..M", or "-f-p -a-p B..M". But I think the only case that they are compatible is when "-f-p" output is a strict subset of what "-a-p" without "-f-p" would give. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html