git-stk
Git-native stacked branch workflow helper with GitHub and GitLab review integration.
git-stk keeps stacks as ordinary Git branches. Stack parent metadata is stored locally in .gitconfig as
branch.<name>.stackParent, and GitHub PR bases or GitLab MR target branches can be used to reconstruct that metadata.
Status
This project is experimental. The current implementation focuses on local stacked branch workflows plus provider-backed review lookup, sync, submit, and cleanup. It does not replace Git's branch model or attempt automatic conflict resolution.
Install
|
Installers are also attached to GitHub Releases, or install
from crates.io with cargo install git-stk --locked.
Then install the man page and wire up shell completions (idempotent; prompts before touching your shell rc):
Upgrade an installer-managed copy with:
Shell Completions
git stk setup configures these automatically. The installed binary prints its own completions, so they stay
in sync across upgrades:
# bash: add to ~/.bashrc
# zsh: write to a directory on your fpath
Elvish, fish, and PowerShell are also supported. The bash output includes a _git_stk wrapper so git's own
completion can complete git stk <TAB> in addition to git-stk <TAB>.
Install For Development
After installation, Git can use the binary as a sub-command:
Commands
Local stack metadata:
Navigation and re-stacking:
Provider-backed workflows:
Upgrading:
upgrade uses the install receipt written by the shell installer; copies installed with cargo install should
upgrade through cargo instead. --head requires a Rust tool-chain, prompts before installing a pre-release build,
and git stk upgrade --force returns you to the latest release afterwards.
Providers
Provider detection uses stack.provider first, then stack.remote, then origin:
GitHub support shells out to gh. GitLab support shells out to glab. Authenticate those CLIs before using provider
commands.
Re-stacking
restack follows Git's rebase.updateRefs config by default. Use --update-refs or --no-update-refs to override that
for one run. If a rebase conflicts, git-stk records state in .git/stack-state; resolve conflicts and run
git stk continue, or run git stk abort.
git-stk records each branch's fork point in .gitconfig as branch.<name>.stackBase and rebases with
--onto, so only a branch's own commits are replayed. This makes restacking safe after a parent is
squash-merged, rebase-merged, or amended. A missing or stale fork point falls back to a plain rebase.
Generated Assets
Shell completions and a man page can be generated with:
Generated files are written under target/generated.
Project Tasks
License
Copyright (c) 2026 Lara Kelley. MIT License. See LICENSE.