GitButler changelog

GitButler changelog

Back to GitButler

20 releases since March 2026 · GitHub releases, checked Oct 26, 2026

  1. 0.22.3Latest

    • Fixes an incorrect GitHub or GitLab authentication error when syncing a project without a connected forge integration
    • Fixes GitHub pull request publishing failures showing "422 Unprocessable Entity" instead of GitHub's explanation of what needs fixing
    • Fixes a 0.22.2 regression were in some cases the app uses a fallback committer value instead of the configured Git identity

    Download bins from https://gitbutler.com/

  2. 0.22.2

    • Updating the workspace now fast-forwards a local target branch like main after its remote branch advances
    • GitHub repositories with 100 or more open pull requests now refresh correctly as pull request activity changes
    • GitLab: An open merge request with no head commit no longer breaks merge request loading
    • Edit mode no longer crashes on conflicts in non-UTF-8 files or treats those conflicts as resolved
    • Workspace syncs no longer fail when a remote the workspace does not use cannot be fetched
    • Uncommitted changes now load correctly when staged and unstaged changes overlap
    • Slow fetch, push, and clone operations are no longer cancelled after two minutes
    • Pull request and merge request information stays visible when GitHub, GitLab, or Bitbucket credentials are missing or a refresh fails due to a network error
    • Onboarding no longer gets stuck when no Git identity is configured
    • Restoring operation history now keeps the full stack when duplicate branch names exist across stacks
    • Unapplying a stack no longer fails when its branch names also exist in another stack
    • Updating a branch from upstream no longer fails with "BUG: Add edge introduces a cycle" after a local upstream merge
    • Pull requests are no longer shown as "not mergeable" while merge status is still loading or temporarily unavailable
    • but diff --tui is now but tui --diff
    • but diff --no-tui and but config ui have been removed
    • Press b in the TUI to enter branch mode, where branches can now be discarded
    • You can now create a new branch and switch to it, including positioning it above or below another branch
    • Adds branch search, so you can find an existing branch and switch to it
    • Commits can now be moved to a new branch
    • @macgyver13 made their first contribution in

    Download bins from https://gitbutler.com/

  3. 0.22.1

    • macOS: Holding ⌘ while selecting a project now shows that it will open in a new window
    • Adds "Create PR" and "Land" to the branch context menu, so both actions are available regardless of the "Land branches directly" setting
    • When updates from the target branch conflict with uncommitted work, GitButler now keeps both versions, shows the files as conflicted, and lets you mark them as resolved
    • Fixes unexpected vertical scrolling of the workspace while dragging branches between lanes
    • Fixes tracked files being deleted in some workspaces after landing a branch
    • Fixes failed GitHub operations showing a generic response-decoding error instead of GitHub's actual error message
    • Fixes rebase operations unexpectedly moving tags
    • Fixes conflicted commits losing their conflict state when reworded
    • Fixes stale uncommitted files being shown after commits made by the CLI or another process
    • Fixes clean commits being incorrectly treated as conflicted
    • Fixes commit and merge request links using the wrong URL for self-hosted forges reached over SSH on a non-standard port
    • Fixes workspace updates failing after a branch in a stack was squash-merged upstream
    • Fixes "Open in browser" requiring a second click from the branch menu
    • Fixes the diff view failing to highlight commits that uncommitted changes depend on
    • Fixes successful pushes to branches tracking a non-default remote being reported as failures
    • Fixes GitLab projects with many merge requests not showing all of them
    • Fixes some GitHub pull requests getting stuck at "mergeability is unknown", leaving the Merge action disabled
    • Fixes GitHub repositories with more than 100 open pull requests not showing all of them
    • Fixes a branch-not-found error in the branch view after the displayed branch was integrated, landed, or deleted
    • Fixes project-not-found errors that could appear after deleting a project or cancelling project setup
    • Adds but resolve conflicts and but resolve apply for inspecting and resolving individual conflicts in conflicted commits without checking them out
    • but commit can now target any branch chosen from the picker, including branches lower in a stack
    • but commit, but amend, but move, and but squash now show example commands when arguments are invalid
    • but move <branch> --branch <other-branch> can now stack one branch onto another
    • but now detects the terminal's light or dark theme automatically; BUT_THEME still overrides it
    • Adds c, m, and s as default aliases for but commit, but move, and but squash
    • but pick now supports branch targeting with --branch, --above, and --below
    • but squash and but discard now accept directory paths to select the uncommitted changes within them
    • but discard with no target now discards all uncommitted changes
    • but uncommit <branch> now moves the branch's commits back to uncommitted changes and removes the branch
    • but discard --json and but move --json now include a type field on each result
    • The but push picker now shows one entry per stack and which ancestor branches will also be pushed
    • but branch new now supports --above and --below for positioning branches; --anchor and -a remain deprecated aliases for --above
    • but land now deletes the branch from its push remote after landing succeeds
    • but branch --help now points to but reword for renaming branches
    • Improved the guidance shown to coding agents when the GitButler skill is missing or a CLI update is available
    • DeepSeek Harness (dsh) is now detected as a coding agent, with automatic skill setup
    • but pull now keeps both versions when target-branch updates conflict with uncommitted work; resolve the files with but resolve <path>...
    • but pr new now reports the branch and remote that were actually pushed to
    • but push --json now includes the destination branch name in each branchToRemote entry
    • but unapply now explains how to create a branch when the commits being unapplied are not attached to one
    • but push now exits non-zero when one or more branches in a batch fail to push
    • but reword now preserves conflict state when rewording a conflicted commit
    • but status, but pull, and but commit no longer fail when a clean commit is incorrectly marked as conflicted
    • Fixes but push failing to detect conflicted commits in ancestor branches before pushing
    • Fixes but land and but pull deleting tracked files in some workspaces
    • Fixes but status failing with a "too many IDs" error in repositories with a very large number of untracked files
    • Fixes but pull failing when a branch in a stack was squash-merged upstream
    • Improved diff rendering performance, especially for uncommitted files
    • You can now switch directly between commit, squash, and move modes in the TUI
    • but tui <ID> can now open directly on a branch, commit, file, or hunk; --diff opens the diff view immediately and replaces the deprecated but diff --tui
    • Improved the TUI graph preview when moving a branch out of a stack
    • You can now uncommit an entire branch in the TUI
    • You can now press p in the TUI to cherry-pick the selected commit
    • The TUI action bar now lists commit before squash when both are available
    • Fixes ANSI color codes appearing in TUI error messages
    • Fixes stale selection marks remaining after closing a commit's file list in the TUI
    • Fixes conflicted commits losing their conflict state when reworded in the TUI
    • @C0rn3j made their first contribution in
  4. 0.22.0Big update

    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

    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
    • 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 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

    Download bins from https://gitbutler.com/

  5. 0.21.2

    • Fixes a 0.21.1 regression where a pull request cache left by an older version could break the workspace after upgrading
    • Fixes an issue where updating a branch from upstream could fail
    • Bitbucket: Fixes an issue where build status checks could fail to load in some cases
    • Fixes an issue where a "part 1 of 1 in a stack" footer could be added to pull requests that aren't part of a stack

    Download bins from https://gitbutler.com/

  6. 0.21.1

    • Adds Bitbucket Cloud as a first-class forge — create, update, merge, and track pull requests with CI status, right in the app
    • The header project selector now groups projects by recency
    • You can now find a pull request in the branches list by branch name or number
    • Commit details now show the change ID next to the commit SHA
    • C/C++ header files now show the correct language icon
    • The details view is now actionable — mark, discard, commit, and move changes right from it, including individual hunks and committed files
    • You can now search within the help view
    • Press y to copy a commit's change ID
    • You can now manually reload from the details view
    • Fixes an issue where commands run from command mode did not execute in the active project's directory
    • Adds Bitbucket Cloud support to but — create, update, and merge pull requests, plus CI check status
    • but status and mutation commands (commit, reword, and more) now identify commits by their change ID — GitButler's stable ID that survives rebases — rather than the commit SHA
    • but now auto-detects more AI coding agents (including Pi and Poolside) and tailors its output for them by default
    • but pull, but resolve, and but status now walk you through resolving conflicts, listing each conflicted commit and how to fix it
    • but commit now explains failures caused by conflicting commit dependencies, naming the branch that owns them
    • Adds but config push-remote [remote] to view or set the fork remote your branches push to, independent of the target branch
    • but uncommit can now uncommit files from multiple commits or branches in one operation
    • but absorb now errors on an invalid source instead of silently absorbing all changes
    • Fixes an issue where but commit in a linked Git worktree suggested GitButler setup instead of reporting that linked worktrees are unsupported
    • New branches now appear at the top of the branch list instead of the bottom
    • Fixes an issue where dismissing the update banner stopped it from reappearing on a manual update check
    • Fixes an issue where conflicted (unmerged) files in the working directory could cause operations to fail
    • Fixes an issue where unapplying a stack could show a spurious "branch not found" error and leave the branch showing in the workspace
    • Fixes an issue where undoing a commit deletion could fail when an uncommitted change touched the same file
    • Fixes an issue where a repeated branch name in a stack could show a phantom "(no commits)" branch head
    • Fixes a Windows-specific issue with handling deep links
    • @arthurzam made their first contribution in
    • @sidfishus made their first contribution in
    • @reneleonhardt made their first contribution in

    Download bins from https://gitbutler.com/

  7. 0.21.0Big update

    You can now land a branch straight onto its target eg. origin/main, without ever opening a pull/merge request. In the desktop app this is enabled in the project settings (Git stuff) or during project setup. In the CLI this is done with but land <branch>.

    • Added a feature for resolving conflicted commits with AI (right click option) if AI is enabled for the project
    • You can now apply to the workspace GitLab merge requests, including merge requests from forks
    • Fixes an issue where undoing a change could leave spurious uncommitted changes behind
    • Fixes an issue where stacking one branch onto another could fail with an "Invalid parent delimitation"
    • Fixes an issue where the upstream integration modal could break while branch data was being refreshed
    • You can now scroll the list of steps in the upstream integration modal
    • Fixes a GitHub-specific issue where pull requests from forks could use the wrong SSH URL
    • Fixes an issue where a checkout could remove a directory when a file was expected in its place
    • but land <branch> lands an applied branch directly onto its target, skipping the pull request
    • but merge has been removed — but land <branch> --yes now covers it
    • but commit and but amend now report which branch and commit each rejected change depends on
    • but resolve <commit> now has an --ai flag for auto-resolving conflicted commits
    • Significantly improved performance with navigating large diffs
    • The detail view now shows diff stats
    • Arrow keys now work the same as hjkl
    • Commit details now show the change ID
    • Adds a jump mode for quickly moving around the interface

    Download bins from https://gitbutler.com/

  8. 0.20.4

    There is now a new command but agent setup which makes the overall setup easier. It is an interactive wizard for tuning version control behavior (similar to https://docs.gitbutler.com/ai-agents/tuning-agent-behavior but easier to setup). Running this is a good idea for best performance.

    • Multi-committing, amending and splitting of commits now complete quicker and use less tokens
    • Improved PR stacking workflows
    • There is now a "Font size" setting for the diff views (Settings → Appearance)
    • but amend now accepts --changes to amend specific changes into a commit
    • You can now provide a message when creating an empty commit with but commit
    • but uncommit now supports a diff output option to print the resulting changes
    • but status now shows stacked branches that have been merged upstream
    • Hunk IDs are now stable across commits and discards
    • but completions now appears in the help output, making it discoverable when you grab the but binary without an installer
    • but output now labels "unassigned changes" as "uncommitted"
    • Fixes a bug where but apply could report success while leaving a branch unapplied when workspace metadata was stale
    • Removed the but mark and but unmark commands
    • Improved error messages when stdin isn't a terminal
    • You can now reorder stacks in the TUI
    • You can now apply branches from the TUI
    • You can now move multiple commits at once in the TUI
    • You can now commit above or below the selected commit in the TUI
    • You can now copy more things in the TUI — commit details, diff hunks, branch names and more — with shift+y
    • Improved scroll keybindings: j/k/arrows move by line, ctrl+d/ctrl+u jump by 10 lines, and shift+j/shift+k jump by section
    • Unapplying a branch and undoing no longer prompt for confirmation in the TUI, since both can be undone
    • Fixes a bug where moving empty branches did not work correctly
    • Fixes a bug where commit-message and branch-name generation failed for non-OpenAI providers (Anthropic, Ollama, and others)
    • Fixes an issue where commit signing failed when gpg.ssh.program pointed at a path containing a tilde (~)
    • Fixes an issue where being offline produced repeated error toasts from background pull-request polling
    • Fixes an issue where updating the workspace was not handling squash-merge integrated branches properly
    • @ameyypawar made their first contribution in
    • @tobeycodes made their first contribution in

    Download bins from https://gitbutler.com/

  9. 0.20.3

    • Fixes a bug causing an "there is no default target commit" error

    Download bins from https://gitbutler.com/

  10. 0.20.2

    • Fixes a regression from 0.20.1 where in some cases fetching from the remote could error out

    Download bins from https://gitbutler.com/

  11. 0.20.1

    • Changes made from outside the app, such as from the but CLI, now appear in the desktop app automatically without a manual refresh
    • Adds an "Uncommit changes" option to the committed hunk context menu
    • Adds Antigravity as a selectable editor for "Open in Editor"
    • Redesigned how upstream changes are integrated into a branch: a new update button in the branch list opens a redesigned modal that shows how your branch has diverged from its remote, lets you choose an integration strategy, and previews the result before you apply it
    • Fixes a bug where GitHub OAuth failures showed a "missing field" error instead of the actual error response from GitHub
    • Fixes an issue where a new branch created on top of pushed commits was incorrectly styled as already pushed; branch styling now follows the branch's own push status
    • Fixes the stacked-PR footer "part X of N" count so it matches each PR's position badge
    • Fixes an issue where edit-mode refs (gitbutler/edit) were left behind after leaving edit mode
    • Fixes an issue where "Open in Editor" failed to open the project in Zed
    • --json has been replaced by --format json
    • Adds but branch update to integrate a branch's upstream changes, with selectable strategies (built-in templates or custom steps)
    • Fixes some Codex specific issues causing the tool to underperform compared to Claude Code
    • but now warns when an agent's skill files are stale and refreshes them automatically
    • Fixes a bug where but apply reported success and exited 0 even when the branch was left unapplied due to conflicts; it now fails with a clear error
    • Fixes a bug where but rub zz commit did not amend all changes
    • Fixes a bug where but branch show could not find branches that were not at the head of a stack
    • Fixes a bug where the cache directory was never created, so but never stored its update-check result
    • Improved the error message when creating a branch whose path prefix collides with an existing branch
    • You can now mark multiple uncommitted files in the TUI and commit or discard them together
    • You can now move multiple uncommitted files at once in the TUI
    • Improved the labels shown when moving branches in the TUI
    • @matas-zanevicius made their first contribution in
    • @AasheeshLikePanner made their first contribution in
    • @sergeykuzmich made their first contribution in
    • @allenthich made their first contribution in

    Download bins from https://gitbutler.com/

  12. 0.20.0Big update

    GitButler can now be used directly by your coding agent via the but CLI and the agent skill. Multiple agent session can use the but CLI to work in parallel or stacked, branch & commit, clean up history etc. Check the AI Agents docs for how to set it up and tune the behavior to your liking.

    • Removed in-app GUI for Claude Code (superseded by the but skill & workflow for agentic use)
    • Fixes a bug with in-app deep links
    • Fixes a Gerrit specific bug with push destination output
    • Improved the performance and reliability of commit squashing
    • Fixes a bug where branch creation fails with "Branch cannot be created: target commit already belongs to another branch"
    • It is now possible to discard commits that are in a conflicted state
    • The 'theme' of the CLI can now be set via the BUT_THEME environment variable (dark/light)
    • Improved error handling and display on bad user input
    • Significant performance improvements for but branch [list]
    • Fixes a bug where global flags did not work with aliases
    • but branch new now validates the provided name and fails instead of normalizing it
    • but reword <branch> now validates the provided name and fails instead of normalizing it
    • but gui <path> replaces but . for opening a directory in the GUI
    • but gui -n <path> allows opening the GUI in a new window
    • but unapply no longer prompts for confirmation
    • but oplog restore no longer prompts for confirmation
    • but branch delete no longer prompts for confirmation
    • It is now easier to create a new branch from unassigned files
    • Adds the ability to discard multiple commits at once
    • You can now delete non-empty branches
    • You can now copy the content of diffs with Shift+C
    • Fixes a bug where moved files could not be committed
    • @mturac made their first contribution in

    Download bins from https://gitbutler.com/

  13. 0.19.13

    • Fixes a Windows-specific regression from 0.19.12 where the app was not being correctly signed, causing friction with Windows Defender
    • Fixes an issue where undoing a new branch creation with the operations log was not working.
    • Adds an option to set ptyxis as the default terminal
    • Adds the ability to directly commit into a new branch (bound to b)
    • Fixes an issue where but commit empty --json would not print anything.
    • @Andrej730 made their first contribution in

    Download bins from https://gitbutler.com/

  14. 0.19.12

    • Fixes a bug where the app can unexpectedly navigate to the "Configure your workspace" view

    Download bins from https://gitbutler.com/

  15. 0.19.11

    • Fixes a regression from 0.19.10 where updating the workspace would fail with "Branches are all up to date" error
    • Fixes an issue where the AI commit message generation was disabled desptie being enabled in the settings
    • Fixes an issue with stacked PRs where after pushing structural changes the PR base remained stale
    • Fixes an issue where failing to unapply a branch would leave the UI in a stuck state
    • Fixes a Windows-specific issue with "Open in Editor" when running the app from WSL
    • The app now correctly handles shallow clones
    • Fixes the "but-graph inconsistent with the commit graph" issue when performing actions in the app
    • Fixes an issue where creating a branch with a "#" symbol would have the hashtag filtered out
    • Repeated "undo" operations now work as expected (undoing further back in history)
    • but reword --json now correctly produces the relevant JSON output
    • but redo - new command for re-apply undone operations
    • but oplog list now displays more useful descriptions of past operations
    • but teardown now supports --checkout-to override to specify the branch to checkout
    • The TUI now updates on filesystem changes
    • Repeated "undo" operations now work as expected (undoing further back in history)
    • Added "redo" operation to re-apply undone operations
    • Fixes a navigation bug while in move mode
    • @robertmonka made their first contribution in
    • @edgarcnp made their first contribution in

    Download bins from https://gitbutler.com/

  16. 0.19.10

    This and the last few releases include important security fixes. Please update to 0.19.9 or newer.

    • Applying of branches no longer performs an unnecessary rebase
    • Adds support for multi-commit selection and operations (e.g. move, squash etc)
    • Adds support for SHA-256 repositories
    • Amending of commits now shows a modal if there were rejected changes (e.g. due to conflicts)
    • Removes the "split branch" options from the UI (it will be back, better)
    • Fixes an issue where typing a commit message could cause the cursor to jump to the start of the line
    • Fixes an issue with parsing of certain git config files
    • Fixes a bug where unapplying a branch could cause uncommitted changes to appear as untracked changes
    • Fixes a bug where in some cases amending a commit could cause uncommitted deletions to disappear
    • Fixes an issue with updating the workspace resulting in an error "The new head names do not match the current heads"
    • Fixes an issue where the app would fail if the remote has a branch named "head"
    • Fixes a bug where after deleting a project an error "Asynchronous operation failed" would appear
    • Adds a help modal with an overview of key binds (press ? in the TUI)
    • Added experimental light theme (set EXPERIMENTAL_BUT_LIGHT_THEME=1)
    • Adds support for operating on multiple commits at once (e.g. move, squash etc)
    • Adds an "undo" action for undoing the last operation (press u)
    • When squashing multiple commits you can now choose how to combine the commit messages
    • Improved "back" behavior when pressing Esc
    • Fixes a bug where the file list was auto-closing after performing a rub action
    • Improved color consistency (e.g. but diff / show / commit etc)
    • but move now supports moving multiple commits at once
    • but apply now resolves short branch names
    • but absorb now removes --new (it will be back, better)
    • but mcp no longer has the --internal flag
    • but push --run-hooks is now replaced with --no-hooks for disabling
    • but undo now correctly restores to the latest snapshot
    • but branch move has been removed in favor of but move
    • removed the implicit "rub" action (e.g. running but <id> <id> as an equivalent to but rub <id> <id>)
    • fixes an issue where but discard could fail on multi-hunk changes
    • fixes an issue where but discard could fail to discard renaming of files
    • fixes an issue where but rub to amend a file could fail to restore a previously deleted file
    • @samhh made their first contribution in

    Download bins from https://gitbutler.com/

  17. 0.19.9

    • Significant performance improvements starting and navigating in the TUI (but tui)
    • It's now more intuitive to create commits at arbitrary positions above/below other commits in the stack
    • Toasts are now stacked vertically
    • Adds support for creating a new branch from the [unassigned changes]
    • Fixes an issue where squashing a commit without a message was causing additional whitespace to be added to the commit message
    • The branch picker now (press t to open) now lists the [unassigned changes] at the top
    • The branch picker now has key-binds ctrl+n/p to move up/down and ctrl+[ to close the picker.
    • Pressing i in commit mode will use inline reword to write the commit message, for cases where you don't want to open an editor.
    • but status - significant performance improvements
    • When but push is executed, the app UI will be updated to reflect the new state
    • Fixes a windows-specific issue that was causing the CLI to crash with a stack overflow.
    • Fixes a bug where in some cases a branch is not correctly detected as push-able
    • Fixes a issue with forge integrations resulting in a "Command forge_provider not allowed by ACL" error
    • Fixes a GitLab-specific issue where loading the integration would fail with "invalid type: string "...", expected internally tagged enum GitLabAccount"
    • Fixes an issue where in rare cases of the remote tracking branch being deleted, committing locally would fail
    • Fixes a UI issue causing a "null is not an object (evaluating 'u.close')" error popup
    • It is now easier to distinguish different self-hosted forge integrations (instance URL is shown)
    • Improved error handling when diffing deleted resources

    Download bins from https://gitbutler.com/

  18. 0.19.8

    • Adds OpenRouter as a new AI provider in the app
    • Adds loading states when squashing and uncommitting
    • Conflicted commits now explicitly add a marker in the commit message
    • Improved displaying of Pull Request CI/Mergeability state
    • Panel resizers in the the app are now easier to grab
    • Improved error message propagation when creating branches
    • Improved moving of commits across stacks - conflicts are now detected ahead of time
    • You can now configure "Kitty" for "open in terminal"
    • Improved performance when entering "edit"/"conflict resolution" mode
    • Fixes an issue with parsing leading space in directory names
    • Fixes a windows fetch/push issue with some alternative SSH clients (e.g. PuTTY)
    • Fixes an issue where successful pre-push hooks were incorrectly showing failure
    • Fixes an issue with the undo / restore functionality and conflicted commits
    • Fixes a GitLab issue with setting the "draft" flag for MRs
    • The but tui subcommand is no longer "hidden" from --help
    • Adds support for moving hunks
    • Adds support for discarding changes
    • The details/preview pane can now be resized
    • While editing a commit message, the message can be opened in a text editor
    • Simplified branch creation (simply pressing b)
    • Adds support for easy amending into a selection (shift+r for reverse rub)
    • Adds support for invoking any but command with :
    • Adds branch picker with fuzzy filtering (press t)
    • GitButler skill - but skill install now has an option to install in .agents
    • Linux: fixes an issue preventing the but gui subcommand from opening the GUI correctly
    • @RemiKalbe made their first contribution in

    Download bins from https://gitbutler.com/

  19. 0.19.7

    GitButler now has a terminal UI (in addition to the CLI)! If you love keybindings, try it out with the but tui command and feel free to share any feedback in #tui on Discord.

    • Improved performance when exiting edit mode
    • Assigning / staging changes to branches is no longer constrained by commit dependencies
    • Improved file selection behavior with when using the tree view
    • Improved submodule support: it is now possible to add submodules as GitButler projects
    • Improved diff rendering performance with large files
    • Fixes a bug where in some cases the app could stop updating state from file changes
    • Fixes an issue where oplog revert did not handle branches with no commits
    • Fixes an issue where moving a branch to another stack was erroneously changing the stack order
    • Fixes an issue with the absorb functionality where some changes were not being committed
    • Significant improvements to Agentic use (update your SKILL file with but skill install)
    • Fixes an issue where concurrent commits would cause a "Database locked" error
    • Fixes an issue where but amend and but absorb were breaking pre-push hooks
    • Renamed but branch tear-off <branch> to but branch move --unstack <branch>
    • Added but clean which removes empty branches in the workspace
    • but move now unifies moving of commits and branches (including stacking/unstacking)
    • but uncommit now has a --discard flag which drops the content in addition to uncommitting
    • @DanielEScherzer made their first contribution in
    • @ichoosetoaccept made their first contribution in

    Download bins from https://gitbutler.com/

  20. 0.19.6

    • File previews now only show the selected file by default (change in Settings -> Appearance -> All-in-one diff)
    • File diffs can now be popped out in a floating window
    • Adds a option to preview SVGs as images (Settings -> Appearance -> Preview SVG)
    • Improved rendering performance of diffs
    • Fixes an issue with image diffing when switching between files
    • Fixes an issue with the operations history where "unapply" stack was not being correctly tracked
    • Updated but skill files for improved Claude Code and Codex performance (update with but skill install)
    • but stack - new command for moving branches on top of others to stack them (also but branch move as an alias to the same functionality)
    • Fixes an issue "askpass broker not initialized"
    • @OliverJAsh made their first contribution in
    • @danilax86 made their first contribution in
    • @dslatkin made their first contribution in

    Download bins from https://gitbutler.com/