]> git.ipfire.org Git - thirdparty/git.git/commit - revision.h
git-rev-list: add --exclude-first-parent-only flag
authorJerry Zhang <jerry@skydio.com>
Tue, 11 Jan 2022 21:39:41 +0000 (13:39 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 12 Jan 2022 19:08:42 +0000 (11:08 -0800)
commit9d505b7b49c00c5fa99a25506e63a2ef326a0062
treeebb11a579cd85400317a4d6477b8d5f5c0c5e62a
parent90d242d36e248acfae0033274b524bfa55a947fd
git-rev-list: add --exclude-first-parent-only flag

It is useful to know when a branch first diverged in history
from some integration branch in order to be able to enumerate
the user's local changes. However, these local changes can
include arbitrary merges, so it is necessary to ignore this
merge structure when finding the divergence point.

In order to do this, teach the "rev-list" family to accept
"--exclude-first-parent-only", which restricts the traversal
of excluded commits to only follow first parent links.

   -A-----E-F-G--main
     \   / /
      B-C-D--topic

In this example, the goal is to return the set {B, C, D} which
represents a topic branch that has been merged into main branch.
`git rev-list topic ^main` will end up returning no commits
since excluding main will end up traversing the commits on topic
as well. `git rev-list --exclude-first-parent-only topic ^main`
however will return {B, C, D} as desired.

Add docs for the new flag, and clarify the doc for --first-parent
to indicate that it applies to traversing the set of included
commits only.

Signed-off-by: Jerry Zhang <jerry@skydio.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/rev-list-options.txt
blame.c
revision.c
revision.h
shallow.c
t/t6012-rev-list-simplify.sh