release/0.18.4

gitbutlerapp/gitbutlerrelease/0.18.4Jan 20, 2026by krlvi

AI Summary

A major CLI overhaul featuring new commands like 'but diff' and 'but show', improved status output with upstream data, and numerous UI/fix improvements including drag-and-drop enhancements and performance tweaks.

Key Highlights

  • New 'but diff' and 'but show' commands
  • Renamed commands: 'but review' -> 'but pr'
  • Async fetching from remotes and improved progress output
  • Improved diff rendering performance

Breaking Changes

  • Command 'but log' has been removed
  • Command 'but snapshot' moved to 'but oplog snapshot'
  • Command 'but describe' renamed to 'but reword'
  • Multiple command aliases updated

New Features

  • Diff preview command for files and branches
  • Show command for commit and branch details
  • Alias command for custom aliases
  • Resolve and discard commands for conflicts
  • Async remote fetching with progress bars

Full Release Notes

## Changes
- Drag-and-drop operations now indicate what the operation would be on hover while dragging
- Adds drag and drop support for hunks to create a new branch on drop
- Adds an option for configuring allowed image sources under the CSP config (applicable for self-hosted forges)
- Ctrl + a now selects all files in lists (similar to Cmd + a on Mac)
- Amending commits no longer resets author dates (commit dates are still updated, same as git)
- Improved Gerrit support with including a fallback URL generation the pushing a commit is a noop
- Renaming a branch to the same name is now a noop instead of an error
- Adds a new setting under "Appearance" for displaying file names first in the path
- Improved diff rendering performance
- Linux: added docs for Linux specific workarounds and fixes in https://github.com/gitbutlerapp/gitbutler/blob/master/LINUX.md

## Fixes 
- Fixes a bug causing several operations to error out with "Stack is uninitialised"
- Fixes a Windows specific issue with poor performance with file watching under WSL
- Fixes a high CPU usage under Linux
- Fixes a bug preventing the creation of a branch underneath an existing stack
- Fixes an issue that was preventing the discarding of binary files
- Fixes an issue with Cursor hooks under Windows
- Fixes a GitLab specific issue where the rebase and squash method of merging did not work from the app
- Fixes a Claude Code UI bug where WebFetch permissions are stored in a wrong format

## CLI specific notes

### Changed
- Adds async fetching from remotes as well as forge info (e.g. PRs, CI)
- Invoking `but` without arguments is now defaulting to `but status` (configurable with `but alias`)
- Slow operations like pushing and fetching now have progress output
- Improved `but help` output
- `but status` no longer invokes a pager
- `but status` now includes PR and CI information by default
- `but status` now displays context-aware hints (disable by aliasing `but status --no-hint`)
- `but status --upstream` now shows upstream commits as well as merge-ability status of branches
- `but status` now indicates Git mode and `but switch-back` reverts the repository to GitButler managed branch (necessary until https://github.com/gitbutlerapp/gitbutler/issues/11866 is done)
- Fixes an issue where `but status --files` was assigning duplicate short IDs
- `but commit` now supports --file for providing commit message
- `but absorb` now provides detailed output of where changes went and why
- `but absorb` - fixed an issue where untracked files did not get absorbed correctly
- `but rub` now supports short IDs from `but diff` that can be used for assigning, amending etc
- `but push` - if no branch is specified, it now prompts the user
- `but push --dry-run` provides a summary of what would be pushed

### Renamed / aliased commands
- `but snapshot` was moved to `but oplog snapshot`
- `but review` is now `but pr`
- `but describe` is now `but reword`
- `but base update` is now `but pull`
- `but base check` is now `but pull --check`
- `but fetch` is now an alias to `but pull --check`
- `but uncommit <commit/file-in-commit>` is now an alias to the equivalent `but rub`
- `but amend <file> <commit>` is now an alias to the equivalent `but rub`
- `but stage <file/hunk> <branch/stack>` is now an alias to the equivalent `but rub`
- `but unstage <file/hunk>` is now an alias to the equivalent `but rub`
- `but squash` is now an alias to the equivalent `but rub` with an optional flag for picking a commit message

### New commands
- `but diff` - a new command for previewing diffs in files changes as well as branches and commits
- `but show` displays commit and branch details
- `but alias` allows setting up custom aliases (e.g `but stfu` -> `but status --files --upstream`)
- `but resolve` for resolving merge conflicts
- `but discard` removes/drops uncommitted changes
- `but update check` check for app updates
- `but update suppress` for suppressing app update hints
- `but pr new` now includes a commented section with a list of commits and modified files
- `but pull` now has more detailed output and has support for the --json flag
- `but reword` now has a `--format` option for fixing the 72 char wrapping of a commit

## New Contributors
* @alerque made their first contribution in https://github.com/gitbutlerapp/gitbutler/pull/11555
* @Rettend made their first contribution in https://github.com/gitbutlerapp/gitbutler/pull/11622
* @Mrmaxmeier made their first contribution in https://github.com/gitbutlerapp/gitbutler/pull/11631
* @godnight10061 made their first contribution in https://github.com/gitbutlerapp/gitbutler/pull/11699
* @senekor made their first contribution in https://github.com/gitbutlerapp/gitbutler/pull/11804

**Full Changelog**: https://github.com/gitbutlerapp/gitbutler/compare/release/0.18.3...release/0.18.4

## Downloads
Download bins from https://gitbutler.com/