Stacked pull requests, simplified

Stack your PRs.
Ship without
the rebase tax.

Till keeps your dependent branches in sync automatically. Create, submit, and restack whole PR chains — one command, no merge headaches.

View on GitHub
~/myproject
tl submit feat/auth-schema #45 open feat/api-routes #46 open feat/user-auth #47 open 3 PRs submitted and linked tl restack rebasing feat/api-routes onto feat/auth-schema rebasing feat/user-auth onto feat/api-routes stack restacked — no conflicts
feat/auth-schema#45merged
feat/api-routes#46open
feat/user-auth#47open

The rebase
nightmare is
real.

Stacked PRs are the right way to ship large features. But managing rebases by hand across a chain of dependent branches? That's where velocity goes to die.

✗ Without Till
main└── feat/auth-schema ← merged └── feat/api-routes ⚠ diverged from parent ⚠ 12 conflicts to resolve └── feat/user-auth ⚠ also broken
✓ With Till
main└── feat/auth-schema ← merged └── feat/api-routes ✓ rebased automatically └── feat/user-auth ✓ rebased automatically$ tl restack # done.

Three commands.
Infinite scale.

Till wraps Git with just enough structure to track dependencies between branches — and keeps everything synchronized when things change.

01
Create your stack
tl create <branch>

Branch off any point in your stack. Till tracks the parent automatically and stores the relationship in your repo — no config files, no ceremony.

02
Submit to GitHub
tl submit

Open pull requests for your entire stack at once. Each PR is automatically pointed at its parent — not main — so reviewers see only the relevant diff.

03
Restack on change
tl restack

When a parent branch is merged or modified, one command cascades the rebase through every dependent branch in order. No conflicts. No manual intervention.

Built for
engineers who
care.

Automatic restacking

Cascade rebases through your entire dependency chain with a single command. No manual intervention, no conflict hell.

Smart PR management

Submit and sync whole stacks at once. PRs point at their parent branch, not main — so reviewers see clean, focused diffs.

Reorder & restructure

Move branches up or down the stack. Split a branch by hunk, file, or commit. Fold changes into a parent. Full flexibility.

Visual stack inspection

tl ls renders your entire stack in the terminal — branches, PR numbers, statuses, and relationships at a glance.

Safe undo

Restack gone wrong? tl undo restores your previous state. Abort mid-rebase with tl abort.

GitHub-native

Built on GitHub's API. No third-party SaaS, no account required for basic use. OAuth for team sync features. O'Saasy License Agreement licensed.

Up and
running in
minutes.

  • 1
    Install the CLI

    Install globally from npm. Requires Node.js v20+.

  • 2
    Initialize your repo

    Run tl init in any git repository. Till stores metadata in your repo's git config — no extra files.

  • 3
    Connect GitHub

    Run tl auth to link your GitHub account for PR management and sync.

SHELL
$ npm install -g @usetill/cli

$ tl init
  ✓ initialized till in current repo

$ tl auth
  ↗ opening GitHub OAuth…
  ✓ authenticated as @yourname
YOUR FIRST STACK
$ tl create feat/database-schema
  # hack hack hack

$ tl create feat/api-layer
  # stacks on top automatically

$ tl submit
  ✓ opened #34, #35 — linked

$ tl ls
  ◆ feat/database-schema  #34
  ◆ feat/api-layer        #35

Stop managing
rebases by hand.
Till does it.

Till is free, open source, and works with any GitHub repository. No account required for local use.

GitHub →