Skip to content

v0.18.0

Choose a tag to compare

@github-actions github-actions released this 25 Sep 04:12
· 41 commits to main since this release
f75dfb5

A couple highlights from this release:

  • News for macOS users:
    If you installed git-spice from the official Tap
    (brew install abhinav/tap/git-spice),
    you'll need to switch to the Cask version of the package
    as the Formula version is being deprecated.

    brew uninstall abhinav/tap/git-spice
    brew install --cask abhinav/tap/git-spice

    If you installed git-spice from homebrew-core (brew install git-spice),
    you can ignore this message.

    For context: Homebrew supports Formulae and Casks.
    Formulae are typically built from source.
    git-spice's Homebrew Tap previously published git-spice as a Formula,
    but it distributed pre-built binaries instead of source code.
    We're switching to publishing a Cask to more accurately reflect
    what's being distributed.

  • git-spice now supports an experimental new command: gs commit fixup.
    It is able to amend any commit in the current branch or any downstack branch.
    Think git commit --amend, but fully stack-aware.

    demo of gs commit fixup

    As the feature is experimental, you must opt into it to access it by running:

    git config spice.experiment.commitFixup true  # enable for this repository
    git config --global spice.experiment.commitFixup true    # enable globally

    If you use it, please feedback and issues about the experimental feature at
    https://github.com/abhinav/git-spice/discussions/867.

  • We've addressed a long-standing limitation of gs branch split:
    it was previously unable to move the branch being split down to another commit.
    Suppose if the branch being split--say 'penguin'--has two commits:
    (a) Invent penguins, and (b) Refactor pangolin, and the branch head points to commit (b).
    Previously, gs branch split would not let you use the name 'penguin' for commit (a),
    as it was already attached to commit (b).

    This limitation has now been resolved: you can now move 'penguin' down to commit (a),
    and create a new branch 'pangolin' for commit (b).

    demo of gs branch split re-using a branch name

  • gs log long (gs ll) and gs log short (gs ls) both now support a --json flag.
    When used, they print all available information as JSON to stdout.
    You can consume this output with tools like jq to implement custom automations using information from git-spice.

Added

  • branch checkout/delete/onto: Include CR numbers in prompt visualization, and allow searching and filtering by CR identifiers.
  • Experimental 'gs branch fixup' command that acts like 'git commit --amend' for any downstack commit. It will commit staged changes to a downstack commit, and automatically rebase the rest of the stack on top of it. See https://abhinav.github.io/git-spice/cli/experiments for instructions on enabling this experimental feature.
  • log {long, short}: Add --json flag. This prints information about tracked branches to stdout as a stream of JSON objects.
  • log {long, short}: Add -S/--cr-status flag to request the statuses of change requests that have been published.

Changed

  • branch split: Allow reusing original branch name for intermediate commits during split.
  • Homebrew Tap now publishes the package as a Cask. If you previously installed with brew install abhinav/tap/git-spice, switch to the cask with brew install --cask abhinav/tap/git-spice. You can ignore this if you installed from homebrew-core (brew install git-spice).
  • gitlab: Submit Merge Requests with remove_source_branch=true. This will delete the source branch when the MR is merged. Opt out of this behavior with the spice.forge.gitlab.removeSourceBranch option.

Removed

  • commit amend: Delete -n flag that was deprecated in favor of --no-edit in v0.10.0 (2025-01-02). If you need a short way to use this flag, try defining a custom shorthand.

Fixed

  • repo restack: Autostash dirty changes in the working tree before the operation. Previously, the changes wouldn't be stashed until checking out the first branch, an operation which might fail because of other conflicts.