Jerry Zhang <jerry@xxxxxxxxxx> 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.