release/0.22.0

thedevs-network/kuttrelease/0.22.0Jul 30, 2026by krlvi

AI Summary

This release introduces native GitHub Stacked PR support and overhauls the CLI and TUI for improved history management. Key improvements include external program integration and better conflict handling.

Key Highlights

  • Native GitHub Stacked PR support
  • Major CLI overhaul with positional arguments
  • New TUI squash mode
  • External program integration for files and hunks

Breaking Changes

  • Removed CLI commands: `rub`, `stage`, and `unstage`
  • Changed CLI syntax for `commit`, `amend`, `squash`, and `move`
  • TUI no longer reads change assignments from the desktop app

New Features

  • GitHub Stacked PRs with automatic metadata
  • TUI support for `--remember-selection`
  • TUI diffs using Catppuccin syntax highlighting

Full Release Notes

## Changes
Native GitHub Stacked PR Support is available in gitbutler 🥞🎉

- GitButler now automatically uses GitHub's native stacked pull requests for enrolled repositories, falling back to description footers otherwise
- You can now choose per project whether GitButler adds stack metadata to pull and merge request descriptions
- Cherry-picking now creates conflicted commits when a pick conflicts instead of blocking it

## CLI
Breaking changes: This release overhauls the `commit`, `amend`, `squash`, `discard` and `move`. The commands `rub`, `stage` and `unstage` have been removed. For agentic use its important to update the skill (`but skill check --update`)

- The CLI no longer reads change assignments from the desktop app. All worktree changes are treated as uncommitted; `but stage`, `but unstage`, and `but commit --only` have been removed
- `but commit` now takes sources positionally and uses `-b/--branch` for the target branch and `--above` or `--below` for stacking
- `but squash` still takes sources positionally but now uses `-t/--target` for the target. It can squash all types of sources into commits, branches, and the uncommitted area.
- `but amend` and `but uncommit` work similarly to `but squash`
- `but move` still takes sources positionally but now uses `-t/--target`, `--above`, or `--below` for the target. It can move commits, committed files, and branches. Use `--unstack` to unstack a branch
- `but rub` has been replaced by `but squash`
- `but amend` and `but squash` now default to uncommitted changes when you omit the source argument
- Mutation commands now print concise results with change IDs by default
- `--json` is now the standard machine-readable output flag, replacing `--format json`
- History-editing commands now refuse to modify commits already merged upstream, with `--allow-merged` available for deliberate overrides
- Errors now include recovery guidance for history edits, pull conflicts, cherry-picks, and pull or merge request actions, including newly conflicted commits and operations rejected by commit dependencies

## TUI

- The TUI now has a dedicated squash mode that lets you select the source or target first and squash across multiple branches, replacing rub mode
- The TUI can now open files and hunks in configured external programs, with multi-file selection, user-defined macOS apps, and per-extension defaults
- The TUI can now discard multiple branches at once
- The TUI now supports `--remember-selection`, restoring the previous selection when reopened
- TUI diffs now use Catppuccin syntax highlighting
- Fixes tab indentation in TUI diffs

## Fixes

- Fixes web links for self-hosted forges that use a custom port
- Fixes an issue where failed cherry-picks could fail silently
- Fixes merge handling so adjacent edits to the same file are detected as conflicts, matching Git's behavior
- Bitbucket: Fixes an issue where pull requests created through GitButler omitted default reviewers

**Full Changelog**: https://github.com/gitbutlerapp/gitbutler/compare/release/0.21.2...release/0.22.0

## Downloads

Download bins from https://gitbutler.com/