on
CC-BY-NC-SA-4.0 Apache-2.0
2 mins
π€ This post includes some LLM-derived content π€
Determining if your branch is part of a GitHub Stacked PR

Since the availability of GitHub's Stacked PRs finally landing for repositories that use a Merge Queue, I've been "kicking the tyres" with some of my contributions to Renovate.
They're working mostly well so far, but I'm finding it a bit annoying trying to remember if I'm on a branch that's part of a stack.
I'd started wiring this into my zsh config, still using Grml's zsh config as a base, and found it was a bit awkward.
I decided to outsource it to Claude Sonnet 5 - cause I guess that's the sort of person I am now? π - and it came out with this:
# in case you're working in a Git worktree
git_common_dir="$(git rev-parse --git-common-dir 2>/dev/null)" || { REPLY=""; return }
stack_file="$git_common_dir/gh-stack"
position="$(jq -r --arg b "$(git branch --show-current)" '
.stacks[]
| select(.branches[]?.branch == $b)
| (.branches | map(.branch)) as $names
| ($names | index($b)) as $idx
| "\($idx + 1)/\($names | length)"
' "$stack_file" 2>/dev/null | head -n1)"
echo "$position"
# outputs i.e. `x/y` or `` if not in a stack
I end up wiring this into my zsh prompt to show a π₯ 1/3 indicator like so:

This works quite nicely, but I've found that it doesn't always stay in sync with GitHub. If a branch has been merged, but you've not yet run gh stack sync, you'll show as still on a stack.
However, you can't run gh stack sync without being on a stacked branch, so your cached data may be out-of-sync until that's fixed.