Summary
Bind v to open the existing compare-commits view for a branch (or worktree) against a base branch, diffed from their merge-base (three-dot, base...HEAD) so it shows only that branch's own changes — a PR-style "what did this branch change" review. No new popup or tab: it reuses CompareCommitsPopup unchanged.
Motivation
The Branches popup already has Shift+C ("Compare"), but that's a tip-to-tip (two-dot) diff of the selected branch vs HEAD, so it includes commits the base gained after the fork point (and reads in the opposite direction). A merge-base diff answers the "what has my branch changed relative to X" question directly, the way a PR diff reads.
What it adds
One key, v (diff_base); the base varies by context, always merge-base:
- Global
v — current branch (HEAD) vs the repo's base branch (auto-resolved: main/master/origin/*).
- Branches popup
v ("Diff since branch-point") — current branch vs the highlighted branch (an arbitrary base). Sits next to the existing Shift+C ("Compare"); the distinct labels keep the two clear.
- Worktrees popup
v — the selected worktree's branch vs the base branch, without switching into it.
Backend is a small asyncgit branch_diff module (merge_base, resolve_base_branch, diff_range_vs_base, diff_range_vs_ref). The triggers just resolve two commit ids and push the existing OpenPopup(CompareCommits(...)).
Worktree touch-point (heads-up)
The Worktrees-popup v is built on a worktree-management popup that isn't upstream yet — proposed separately in #2995. So that surface can't land independently: a PR against current master would be global v + Branches-popup v only, with the worktree surface following if/after #2995 lands.
Questions
- Is this something you'd want as a PR?
- If so, preferred scope — just the global "diff current branch vs main"
v, or also the Branches-popup v (given the Shift+C overlap)?
- Any preference on the key (
v) or the command naming?
Working implementation on my fork if useful: https://github.com/stevenpollack/gitui/tree/feat/branch-diff
Summary
Bind
vto open the existing compare-commits view for a branch (or worktree) against a base branch, diffed from their merge-base (three-dot,base...HEAD) so it shows only that branch's own changes — a PR-style "what did this branch change" review. No new popup or tab: it reusesCompareCommitsPopupunchanged.Motivation
The Branches popup already has
Shift+C("Compare"), but that's a tip-to-tip (two-dot) diff of the selected branch vsHEAD, so it includes commits the base gained after the fork point (and reads in the opposite direction). A merge-base diff answers the "what has my branch changed relative to X" question directly, the way a PR diff reads.What it adds
One key,
v(diff_base); the base varies by context, always merge-base:v— current branch (HEAD) vs the repo's base branch (auto-resolved:main/master/origin/*).v("Diff since branch-point") — current branch vs the highlighted branch (an arbitrary base). Sits next to the existingShift+C("Compare"); the distinct labels keep the two clear.v— the selected worktree's branch vs the base branch, without switching into it.Backend is a small
asyncgitbranch_diffmodule (merge_base,resolve_base_branch,diff_range_vs_base,diff_range_vs_ref). The triggers just resolve two commit ids and push the existingOpenPopup(CompareCommits(...)).Worktree touch-point (heads-up)
The Worktrees-popup
vis built on a worktree-management popup that isn't upstream yet — proposed separately in #2995. So that surface can't land independently: a PR against currentmasterwould be globalv+ Branches-popupvonly, with the worktree surface following if/after #2995 lands.Questions
v, or also the Branches-popupv(given theShift+Coverlap)?v) or the command naming?Working implementation on my fork if useful: https://github.com/stevenpollack/gitui/tree/feat/branch-diff