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 →