Subject: Re: [PATCH] git-rev-list: add --exclude-path-first-parent flag

From: Junio C Hamano <[email-masked]>
Date: Fri, 16 Apr 2021 17:45:44 -0700

Jerry Zhang <[email-masked]> writes:

> Add the --exclude-path-first-parent flag,
> which works similarly to --first-parent,
> but affects only the graph traversal for
> the set of commits being excluded.
>
>    -A-------E-HEAD
>      \     /
>       B-C-D
>
> In this example, the goal is to return the
> set {B, C, D} which represents a working
> branch that has been merged into main branch
> E. `git rev-list D ^E` will end up returning
> no commits since the exclude path eliminates
> D and its ancestors.
> `git rev-list --exclude-path-first-parent D ^E`
> however will return {B, C, D} as desired.

It is not clera why you want to have this, instead of doing a more
obvious "D..E^".  Even better is "E^..E", which is often what you
want when viewing a history like my 'seen' that is a straight-line
into which tips of branches are merged.

E^..E (or doing the same for any commit on the mainline in such a
history whose first-parent chain solely consists of merges) would
show the list of the commits that came from the side branch that was
merged, plus the merge commit, where the committer who created a
merge would hava a chance to give a summary of what happened on the
side branch.