Till keeps your dependent branches in sync automatically. Create, submit, and restack whole PR chains — one command, no merge headaches.
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.
Till wraps Git with just enough structure to track dependencies between branches — and keeps everything synchronized when things change.
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.
tl submitOpen 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.
tl restackWhen a parent branch is merged or modified, one command cascades the rebase through every dependent branch in order. No conflicts. No manual intervention.
Cascade rebases through your entire dependency chain with a single command. No manual intervention, no conflict hell.
Submit and sync whole stacks at once. PRs point at their parent branch, not main — so reviewers see clean, focused diffs.
Move branches up or down the stack. Split a branch by hunk, file, or commit. Fold changes into a parent. Full flexibility.
tl ls renders your entire stack in the terminal — branches, PR numbers, statuses, and relationships at a glance.
Restack gone wrong? tl undo restores your previous state. Abort mid-rebase with tl abort.
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.
Install globally from npm. Requires Node.js v20+.
Run tl init in any git repository. Till stores metadata in your repo's git config — no extra files.
Run tl auth to link your GitHub account for PR management and sync.
$ npm install -g @usetill/cli $ tl init ✓ initialized till in current repo $ tl auth ↗ opening GitHub OAuth… ✓ authenticated as @yourname
$ 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