Command Reference
so bottom
Navigates to the first branch stacked directly on top of the base branch.
The stack is determined by the tracking information set via 'so track' or 'so create'. This command finds the first branch after the base in the sequence leading to the top.
Flags:
-h, --helphelp for bottom
so create
Creates a new branch stacked on top of the current branch.
If a [branch-name] is not provided, you will be prompted for one.
If there are uncommitted changes in the working directory:
- They will be staged and committed onto the new branch.
- You must provide a commit message via the -m flag, or you will be prompted.
Flags:
-h, --helphelp for create-m, --message stringCommit message to use for uncommitted changes
so down
Navigates one level down the stack towards the base branch.
The stack is determined by the tracking information set via 'so track' or 'so create'. This command finds the immediate parent of the current branch.
Flags:
-h, --helphelp for down
so log
Shows the sequence of tracked branches leading from the stack's base branch to the current branch, based on metadata set by 'so track' or 'so create'.
Includes status indicating if a branch needs rebasing onto its parent.
Flags:
-h, --helphelp for log
so restack
Updates the current stack by rebasing each branch sequentially onto its updated parent. Handles remote 'origin' automatically.
Process:
- Checks for clean state & existing Git rebase.
- Fetches the base branch from 'origin' (unless --no-fetch).
- Rebases each branch in the stack onto the latest commit of its parent.
- Skips branches that are already up-to-date.
- If conflicts occur:
- Stops and instructs you to use standard Git commands (status, add, rebase --continue / --abort).
- Run 'so restack' again after resolving or aborting the Git rebase.
- If successful:
- Prompts to force-push updated branches to 'origin' (use --force-push or --no-push to skip prompt).
Flags:
--force-pushForce push rebased branches without prompting-h, --helphelp for restack--no-fetchSkip fetching the remote base branch--no-pushDo not push branches after successful rebase
so submit
Pushes branches in the current stack to the remote ('origin' by default) and creates or updates corresponding GitHub Pull Requests.
- Requires GITHUB_TOKEN environment variable with 'repo' scope.
- Reads PR templates from .github/ or root directory.
- Creates Draft PRs by default (use --no-draft to override).
- Stores PR numbers locally in '.git/config' for future updates.
Flags:
--forceForce push branches-h, --helphelp for submit--no-draftCreate non-draft Pull Requests--no-pushSkip pushing branches to remote
so top
Navigates to the highest branch in the current stack.
The stack is determined by the tracking information set via 'so track' or 'so create'. This command finds the last branch in the sequence starting from the base branch.
Flags:
-h, --helphelp for top
so track
Associates the current branch with a parent branch to define its position within a stack. This allows 'so log' to display the specific stack you are on.
Flags:
-h, --helphelp for track
so up
Navigates one level up the stack towards the tip.
The stack is determined by the tracking information set via 'so track' or 'so create'. This command finds the immediate descendent of the current branch.
Flags:
-h, --helphelp for up