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, --help
help 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, --help
help for create-m, --message string
Commit 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, --help
help 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, --help
help 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-push
Force push rebased branches without prompting-h, --help
help for restack--no-fetch
Skip fetching the remote base branch--no-push
Do 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:
--force
Force push branches-h, --help
help for submit--no-draft
Create non-draft Pull Requests--no-push
Skip 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, --help
help 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, --help
help 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, --help
help for up