Changes
- Updating the workspace now updates linked worktrees too
- Operations that update linked worktrees now preserve conflicting uncommitted changes with conflict markers
Fixes
- Repositories owned by another user now explain how to allow access with
safe.directory - Fixes branch apply, unapply and update operations writing encrypted files or Git LFS pointers instead of usable file contents in git-crypt and Git LFS repositories
- Fixes unnecessary conflicts and incorrect file contents when combining branches based on different target commits
- Fixes updating the workspace leaving local branches behind after they were merged
- Fixes failed checkouts leaving files partly written or losing uncommitted edits
- Fixes project loading failing when another process deletes an untracked file while changes are being read
CLI
but commit,but amend,but discardandbut diffnow accept Git-style paths, including relative and absolute paths, directories and.but undonow refuses operations it cannot safely reverse on branches checked out in linked worktreesbutnow gives clearer errors and recovery steps for repository, branch, worktree, push, merge, undo and forge authentication problems, and suggests alternatives to unsupported commandsbut push --dry-runnow reports branches that cannot be pushed, including branches containing conflicted commits, and exits non-zero if any are refusedbut rewordnow reads commit messages or branch names from a file or stdin with-Fbut amendnow defaults to the latest commit when the target branch is unambiguousbut amendnow refuses when there are no changes to amendbut diffnow accepts several file targetsbut diffandbut shownow support--statfor changed-file and line countsbut pr newnow accepts messages with blank lines before the titlebut amend -tandbut squash -tnow accept branches checked out in linked worktreesbut worktree new,but worktree removeandbut branch deletenow handle worktree directories deleted outside GitButlerbut commitruns Git commit hooks again in the main checkout;-n/--no-hooksor--no-verifyskips them (linked-worktree commits still skip hooks)but pullnow removes stale remote-tracking branches after updatingbutnow reports linked worktrees whose uncommitted changes gained conflict markers- Fixes
but uncommitbeing blocked by unrelated conflicted commits - Fixes
but resolve conflicts <commit>suggesting a resolution command for the wrong commit - Fixes
but diffreporting clean files as missing - Fixes amending an empty branch rewriting the commit below it
- Fixes
but resolveoverlooking conflicted commits in linked worktrees - Fixes
butfailing to open repositories beneath a previously registered project whose.gitdirectory was removed - Fixes
but pullleaving local branches behind after they were merged
Native app
Highlights from the native app, available under "Experimental" in settings:
- Adds split panes for pages and terminals, with drag-and-drop arrangement, keyboard navigation and saved page positions
- The navigator can now appear as tabs across the top of the window, with drag-and-drop ordering for projects and worktrees
- Adds a command editor for customizing keyboard shortcuts and finding commands by pressing their keys
- Adds
but://openlinks to projects, branches, commits, uncommitted changes, files and lines, tabs and settings - Files in the working tree can now be edited directly in the diff, including tracked files with no changes
- Committing changes with dependencies now offers to stack the required branches instead of creating a partial commit
- Adds an option to archive or delete clean worktrees after an update finds their branches merged
New Contributors
- @bjoaquinc made their first contribution in #17018
Full Changelog: release/0.23.2...release/0.23.3
Downloads
Download bins from https://gitbutler.com/