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.

so bottom [flags]

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.
so create [branch-name] [flags]

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.

so down [flags]

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.

so log [flags]

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:

  1. Checks for clean state & existing Git rebase.
  2. Fetches the base branch from 'origin' (unless --no-fetch).
  3. Rebases each branch in the stack onto the latest commit of its parent.
  4. Skips branches that are already up-to-date.
  5. 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.
  6. If successful:
    • Prompts to force-push updated branches to 'origin' (use --force-push or --no-push to skip prompt).
so restack [flags]

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.
so submit [flags]

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.

so top [flags]

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.

so track [flags]

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.

so up [flags]

Flags:

  • -h, --help help for up