git-spice is a tool for stacking Git branches.
It lets you manage and navigate stacks of branches,
conveniently modify and rebase them, and create
GitHub Pull Requests or
GitLab Merge Requests from them.
It works with Git instead of trying to replace Git.
Introduce it in small places in your existing workflow
without changing how you work wholesale.
# Restack all branches$ gs stack restack
# Submit a PR$ gs branch submit
# Submit all PRs$ gs stack submit
# Sync with trunk$ gs repo sync
What is stacking?
Stacking refers to the practice of creating branches or pull requests
that build on top of each other.
It allows chaining interdependent changes together,
while still keeping the individual changes small and focused.
Create, edit, and navigate stacks of branches with ease.
With git-spice's branch management commands,
you can keep your stack in sync with the trunk branch,
automatically rebase dependent branches, and more.
Submit branches in your stack with a single command.
git-spice can submit
the current branch,
the entire stack, or
parts ofthe stack.
If a branch has already been submitted, git-spice will update the submission.
If it has been merged, git-spice will automatically restack branches that depend on it.
git-spice does not need to be adopted all at once.
It does not expect you to flip your entire workflow upside down.
Incorporate it into your workflow at your own pace,
one feature at a time.
git-spice operates entirely locally.
It talks directly to Git, and when you ask for it, to GitHub/GitLab.
All state is stored locally in your Git repository.
A network connection is not required, except when pushing or pulling.
Most commands in git-spice have easy-to-remember shorthands.
For example, gs branch create can be shortened to gs bc.
Explore the list of shorthands with --help or at Shorthands.
We recommend adopting these incrementally.
git-spice is free and open-source software.
It is made available under the GPL-3.0 license.
You may use it to develop proprietary software,
but any changes you make to git-spice itself must be shared.