I was wondering whether there is an efficient way to retrieve the children of a given commit.
Although a method was discussed in Referencing the child of a commit in Git, it is very inefficient.
I thought this would be a straightforward thing to be done in Git, but apparently, it is not.
git rev-listcan show children, but these children have to be reachable from the commits you provide. Assuming you want to show all children reachable from all branches in your repo, you can use something likeThis should output a line that looks like
For convenience, you can add turn the command into a git alias by adding the following line to the [alias] section of your ~/.gitconfig:
The syntax
$COMMIT^@might be confusing, so I’ll explain it. Hopefully$COMMITis self-explanatory. This is then followed by^@, which expands to all parents of the referenced commit. So$COMMIT^@means "all parents of$COMMIT". Since this follows the--notflag, this instructsrev-listto stop processing after it hits any parent of$COMMIT. This is basically just an optimization, because any commit reachable from$COMMITcannot possibly be a child.Note: a previous version of this answer said
tail -1instead ofgrep "^$COMMIT". This may work in a simple test repo (which is why I initially said it), but there’s no guarantee that git rev-list will emit$COMMITlast, if you have any branches that do not contain$COMMIT.