GitHub Stacked PRs

What stacked PRs provide

  • Feature lets you create a chain of dependent PRs so each represents a small, “reviewable” unit while depending on earlier ones.
  • Reviewers can focus on subsets of a large change, with CI, discussion, and approvals scoped per PR rather than one giant diff.
  • GitHub adds a stack-aware UI and (via gh stack) automation for rebasing, syncing, and merging multiple PRs together or in order.

Typical use cases described

  • Large refactors or framework upgrades (e.g., language/React Native/Angular version bumps) that touch many files.
  • Backend–frontend feature work where the backend can land independently but the frontend depends on it.
  • Long-running features in monorepos, where many small, incremental changes are preferable to a single huge branch.
  • Less helpful for cross-repo or cross-microservice work; several people want stacks across multiple repositories but GitHub does not support this.

How this differs from existing Git/GitHub workflows

  • Many commenters already emulate stacked PRs using branched chains, git rebase --update-refs, and manual PR creation.
  • Key improvement is first-class UI and coordination: seeing the stack, merging multiple levels at once, and having GitHub rebase children when parents merge.
  • Some argue GitHub should instead improve per-commit review, interdiffs, and interactive history editing in the UI.

Comparisons with other tools and workflows

  • Frequently compared to Phabricator and Gerrit “stacked diffs,” which many consider superior to GitHub’s traditional PR model.
  • GitLab has “stacked diffs” and merge trains; people contrast UIs and limitations.
  • Other stacking tools mentioned: Graphite (now part of Cursor), Tangled.org + jujutsu, Sapling, git-town, git-spice.
  • Broader side-thread on Git vs Mercurial performance, UX, and big-tech internal systems (Sapling, Piper, etc.).

Limitations and open questions

  • Currently single-repo only; not supported across forks or multiple repositories.
  • Unclear how well review history survives rebases/restacks and how robust conflict handling is beyond “stop and fix.”
  • Some worry about long-lived stacks, rebase/force-push footguns, and merge-conflict complexity, especially with squash merges.

Philosophical disagreements

  • Supporters: stacked PRs make large work tractable, reviews faster, and encourage small, semantically meaningful units.
  • Skeptics: prefer simple branches + small independent PRs, or see stacks as compensating for poor GitHub review UX rather than a fundamental need.
  • Debate over whether the “atomic” unit should be a commit, a PR, or an email-style patch, and whether partial stack merges are architecturally sound.