Releases: abhinav/git-spice
v0.27.0
v0.26.1
Changed
- auth: git-spice will no longer automatically fall back to Git Credential Manager-managed credentials without running 'gs auth login'.
Fixed
- auth: Disable prompting when querying 'git credential', as it may block authentication flow otherwise.
- auth: Fix 'git credential' being queried even when Git Credential Manager is not explicitly selected.
Thanks to the following sponsors for supporting this release:




v0.26.0
Changed
- git: Operations that fail due to index.lock contention are now retried.
- submit: GitLab Merge Request references in stack navigation now use GitLab's "+" reference expansion so the MR title renders inline.
Added
- commit: Add '-F'/'--file' flag to read a commit message from a file.
- auth: The secret storage backend may now be configured with the 'spice.secret.backend' configuration option or the GIT_SPICE_SECRET_BACKEND environment variable. Explicitly selecting a secret storage backend allows bypassing the overhead of git-spice attempting and failing to use secure storage on platforms where it is not available.
- The new 'spice.git.indexLockTimeout' configuration option controls how long git-spice retries in case of index.lock contention.
Fixed
- git: Reduced index.lock contention by disabling optional Git locks for read-only commands.
- github: Fix the advertised permission scopes for fine-grained personal access token authentication
- submit: If a change request for a branch is closed, and the branch is renamed, the next change request created from that branch will use the new name if the branch upstream has been also updated.
- gitlab: Remote URLs with arbitrary SSH ports are now recognized when discovering repositories for submit operations.
- repo sync: Keep dirty working-tree changes safe while syncing merged branches, including when sync deletes the current branch.
- ui: Fix interactive shells occasionally dropping the first character of the next command when typing begins before a git-spice command has fully returned control to the shell.
Thanks to the following sponsors for supporting this release:




v0.25.0
As noted in the v0.24.0 release,
we are renaming the git-spice 'gs' command to 'git-spice' to avoid conflicting with other command line tools.
As part of finishing this transition,
this release drops the gs binary from officially published packages
(GitHub Releases, Homebrew Cask, and ArchLinux AUR package).
We recommend adding an alias for git-spice in your shell configuration:
alias gs='git-spice'Besides that, this release contains a number of improvements and bug fixes.
Highlights include:
-
Support for BitBucket Cloud and Git Credential Manager authentication.
Thanks to @ed-irl for their contributions. -
Fixes a long-standing issue with branch selection prompts when,
if the number of branches exceeded the terminal height,
we would just truncate the list instead of scrolling. -
We've replaced the third-party GitLab client library with a smaller custom implementation.
This allows us to reduce the git-spice binary size by >25%.
The full list of changes is as follows:
Added
- forge: Add Bitbucket Cloud support
- forge: Allow authenticating to GitHub and BitBucket Cloud using Git Credential Manager (GCM).
- submit: Add 'spice.submit.skipRestackCheck' configuration option to skip restack verification during branch submission.
This can be configured to skip the check only for branches on top of trunk, or for all branches. - log: Add '--cr-comments' flag and 'spice.log.crComments' configuration option to display review comment counts next to branches in the log.
- branch checkout: Add 'spice.branchCheckout.trackUntracked' configuration option to control tracking of untracked branches.
Defaults to prompting the user, but can be set to 'always' to always track untracked branches, or 'never' to not track nor prompt. - New 'branch diff' command shows the diff between a branch and its base.
Changed
The following changes are not expected to have any user-facing impact,
but they involved significant internal refactoring,
so please report bugs if you see any.
- Upgrade TUI rendering to v2 of underlying libraries.
- gitlab: Replace the GitLab API client with a smaller internal client.
Deprecated
- branch checkout: Deprecate 'spice.branchCheckout.trackUntrackedPrompt' configuration option in favor of 'spice.branchCheckout.trackUntracked'.
Removed
- Remove 'gs' binary from published packages: GitHub Releases, Homebrew Cask, and ArchLinux AUR package.
- A warning is no longer printed if the program is invoked as 'gs'.
Fixed
- Guidance printed by git-spice commands will use the name of the active binary instead of always using 'gs' or 'git-spice'.
- Branch selection prompt now scrolls when the terminal is too short to show all matching branches.
- restack: Fix issue where commits from a branch could be dropped during restack if they showed up in the base branch's reflog.
- submit: Honor worktree-local and repository-local Git editor settings for interactive prompts.
- gitlab: Accept dots in glab CLI authentication tokens
- commit fixup: Preserve unstaged worktree changes when rejecting an empty index.
- restack: Failures during an internal
git ls-filescheck are now reported with a clearer error message instead of an unhelpful unmerged-file report.
v0.24.2
See 0.24.0 release notes
for details on the ongoing rename of 'gs' to 'git-spice'.
Fixed
- Homebrew Cask: Fix macOS quarantining 'gs' binary.
v0.24.1
See 0.24.0 release notes
for details on the ongoing rename of 'gs' to 'git-spice'.
Fixed
- Fix 'gs' binary missing from GitHub Release artifacts.
- Fix Homebrew Cask failing to install because of an invalid instruction.
v0.24.0
We are renaming the 'gs' binary to 'git-spice'
to avoid conflicting with other command line tools.
This release is a compatibility release to ease the transition.
In this release, both binary names are available in
GitHub Release archives, the official Homebrew Cask,
and the AUR binary package:
- 'git-spice': the new name for the binary
- 'gs': deprecated, will print a warning on every invocation
unlessGIT_SPICE_NO_GS_WARNING=1is set in the environment
If you prefer using the name 'gs',
we recommend adding an alias to your shell configuration:
alias gs='git-spice'The 'gs' binary will be removed in an upcoming release.
We encourage users to switch to 'git-spice' as soon as possible
to avoid disruption when the 'gs' binary is removed.
Changed
- Rename 'gs' binary to 'git-spice'.
Added
- Keep
gsas a compatibility alias in GitHub Release archives,
the official Homebrew Cask, and the AUR binary package for this release.
v0.23.0
Added
- git-spice now sets the
GIT_SPICE=1environment variable for most external commands it spawns, including editors and Git itself. This may be used in, for example, Git hooks that need to detect if they are being run as part of a git-spice operation. For a demonstration of use, see this recipe. - Branch listings including
gs logcommands and commands that present a branch selection prompt, all now show paths for branches checked out in other worktrees. - submit: Detect and recreate navigation comments if they are deleted externally.
- submit: Add
spice.submit.reviewers.addWhenconfiguration option, which allows controlling whether reviewers configured withspice.submit.reviewersare added to draft change requests.
Fixed
- gitlab: Token extraction for CLI-based authentication now supports the format used by glab CLI v1.66.0 and later.
v0.22.0
Changed
- GitHub OAuth authentication now additionally requires the
read:orgscope.
We need this to resolve GitHub teams for the--reviewerflag introduced in v0.21.
If you're using git-spice via OAuth authentication and use this flag,
please rungs auth login --refreshto generate a new local token with expanded scope.
v0.21.0
Release highlight:
This release brings --reviewer and --assign flags to all submit commands.
You can now request reviews or assign CRs at creation time, or during updates to existing CRs.
Both flags have configuration variants: spice.submit.reviewers and spice.submit.assignees that are merged with flag values.
This unlocks a couple common use cases:
# Always request reviews from my team
git config spice.submit.reviewers 'example/my-team'
# Always assign submitted CRs to myself
git config spice.submit.assignees $(whoami)Added
- submit: Add --reviewer flag and 'spice.submit.reviewers' configuration option to request reviews from specific users or teams upon CR submission.
- submit: Add --assign flag and 'spice.submit.assignees' configuration option to assign CRs to users upon submission.
- Branch selection prompt now supports pressing Ctrl+U to clear the search filter.
Fixed
- submit: --dry-run now reports which labels will be added to existing CRs upon submission.
- branch submit: Check if the Git configuration prevents pushed branches from being tracked, which would leave those branches in a state where follow-up submits are not possible.
- branch submit: Fix panic when updating CRs that have no upstream branch configured.

