How can I get a list of branches that are first-level descendants of the current HEAD?
I can get a list of the whole tree with:
git log --graph --abbrev-commit --pretty=decorate --branches
which gives
* 2eff4a7... (refs/heads/issue-8351) Added a factory factory factory.
* 2e387aa... Refactored all of the factory factories.
| * b3fad52... (refs/heads/issue-8354) Moved the baz out of the constructor.
|/
| * f4cf3fe... (refs/heads/experimental) quuz looking good
| * 1d276b9... Risky fix to replace the quux with the quuz.
| * d6b0222... (refs/heads/issue-7559) Fixed the quux in the foo.
|/
| * 3f4cfff... (refs/heads/dev) wip
|/
* 76f493f... (refs/heads/master) SVN 30192
but I'd like to just get a plain list of the first-level children of the current branch, like this example for master
:
dev
issue-7559
issue-8354
issue-8351
and if I was on branch issue-7559
I'd only see:
experimental
How might I go about this?
You could do it as follows.
First the usual preamble:
Use
git for-each-ref
to gather the SHA-1 and name for each ref:If a commit is a child of
HEAD
, the set of commits reachable fromHEAD
excluding everything reachable from the commit in question is the empty set. We can check this relationship withgit rev-list
.For each ref that is a descendant of
HEAD
but it not equivalent toHEAD
, we examine the path fromHEAD
to that reference usinggit log
. If the path contains the tip of another branch, the ref cannot be a first-level child.All survivors of this gauntlet are first-level children.