release/0.23.22026-11-02
GitButler 0.23.2 更新
这版修了一批老毛病:提交与 amend 不再打乱暂存区、也不会掩盖后续改动;外部改动 worktree 后应用会正确刷新,删除的 worktree 不再报错;合并后的 PR 不会在更新工作区后从分支列表消失;撤销操作能正确还原新建和被 GC 清理的分支。GitLab 老实例的 MR 列表、以 /api/v4/ 结尾的地址认证,以及 Bitbucket ssh.bitbucket.org 远程的 PR 创建与链接也一并修好。
CLI 方面,but agent setup 支持 Amp,but agent uninstall 可清除编码代理中的技能与指令;but worktree new --above 接受分支名、ID 与 Git 修订;but commit -b 支持游离的关联 worktree;but resolve 增加冲突残留检查与更清晰的恢复提示;but diff 支持已提交的 hunk ID。but open 已移除,改用 but gui 或 but .。
原生应用新增多项实验功能(设置中开启):每个检出的集成终端、提交图、TUI 式键盘操作模式、应用内 PR 编辑与自动合并,以及更完善的提交与 diff 编辑。
release/0.23.12026-10-28
GitButler 0.23.1 版发布,主要是修补 0.23.0 引入的回归:把 gitbutler/workspace 设为目标分支后项目无法加载,以及目标分支没有上游、被推分支又没有关联 PR 时推送失败,均已修复。此外还处理了若干日常痛点:在 GitButler 之外暂存、重命名或删除文件后出现的幽灵未提交改动;丢弃文件删除时能恢复已提交内容;上游合并提交显示错误的 PR 标题与链接;目标分支选择器遇到指向 tree 的远程引用时报错等。
命令行方面,but pr new 支持 Claude Desktop 为检出分支开启 PR 自动修复;but push <branch> --dry-run 现在会列出栈下所有将被推送的分支;but apply --json 移除了 workspaceRefCreated 字段,并修正了分支重复列出、误报新应用等问题。
设置中新增“实验性”选项卡,可启用全新的原生版本应用。
release/0.23.02026-10-27
Work in any branch without gitbutler/workspace
GitButler now works in any Git repo, without the need to run a setup or to be on gitbutler/workspace ref.
All app operations work as normal. GitButler switches to gitbutler/workspace only when you apply a second parallel branch and moves back when you return to one.
Worktree support
You can now work with linked Git worktrees directly in GitButler. Worktrees created by other apps show up in the CLI status or as lanes in the GUI and support most GitButler operations.
For example you (or your agent) can move individual changes, commits or branches to and from worktrees as needed.
Parallel branches are light & fast while worktrees offer full code isolation so each tool can be used situationally.
Worktrees that already exist when you upgrade start archived. Bring them in from the new Worktrees page in Project settings or with the but CLI.
Discarding changes in a worktree can’t be undone yet.
Changes
- Projects now use a local target branch, so GitButler can be used on repos without a remote
- Faster refreshes in Git LFS repositories and after undo, plus faster workspace updates in repositories with many pack files
- Commit signing now honors more Git settings, including X.509 signing and gpg.ssh.defaultKeyCommand
- SHA-256 repositories now support commit signing, rewording, undo and push
- Workspace update previews no longer sign temporary commits or disable signing when a preview signature fails
- GitButler no longer installs its own pre-commit and post-checkout hooks
- Branches can now be dragged below the last branch in a stack
CLI
- zz is now @ for uncommitted changes
- but land is now but merge, and land still works as an alias
- but setup is gone because but works in any repository. but init replaces but setup --init
- but review, but branch new --anchor and ID ranges such as g0-h2 are removed. Use but pr, --above and single IDs instead
Worktrees
- but status lists worktrees with their own IDs and marks ones behind the target
- but worktree creates, lists, archives, restores and removes worktrees. but worktree new can start at a commit with --above or on an existing branch outside the workspace
- but pull --update <workspace|worktrees> picks what to update. A worktree whose branch merged upstream moves to a new branch at the latest target commit
- but move <branch> --above <branch> moves a branch between a worktree and the workspace
New in this release:
- but split moves files or hunks out of a commit into a new commit above it
- but diff <commit> shows hunk IDs, so but squash, but move, but uncommit and but discard can work on single hunks of a commit
- but merge and but pull work without a remote, using the local target branch
- but merge --ff-only refuses merges that can't fast-forward
- but commit, but squash, but move and but split read the message from a file or stdin with -F/--file
- but status marks the checked-out branch with [HEAD]
- b is a default alias for but branch
TUI
- You can squash several marked commits into one
- You can archive (a) and unarchive (u) worktrees
- Mark committed hunks in the details view to discard, squash or move them
- Move a commit's files to another commit, a branch or a new branch
- In move mode, b moves commits onto a new branch above the selected one
- Undo (u) works from details mode
- The status view scrolls with the mouse wheel, and clicking a row selects it
- but tui starts faster, especially on Linux
- Windows: ? and : now respond
Fixes
- Fixes the diff preview jumping to another file when the file list changes
- Fixes workspace loading failures after commits made outside GitButler or a concurrent fetch
- Failed workspace updates now show the error and a retry button; unrelated target or remote history now comes with recovery guidance
- Fixes partial commits leaving Git's index out of sync, and empty commits being created when all selected changes are rejected
- Fixes "Create branch below" moving existing commits into the new branch
- Fixes undo leaving stray branch names, failing to restore deleted branches, or showing files outside a sparse checkout as deleted
- Fixes deleted files reappearing as changes after pulling or applying a branch that also deletes them
- Fixes pushing a branch based on gitbutler/workspace accidentally publishing unrelated applied branches
- GitHub and GitLab: Authentication, access and rate-limit errors now explain how to recover and stop repeated background failures
- GitHub: Fixes merging native stacked pull requests and loading CI checks for pull requests from forks
- Fixes self-hosted forge detection and repository URLs containing .git within their names
- Network operations now time out when the remote stops responding; failed Git hooks now show their error output
- Git changes now appear promptly while builds or dev servers keep writing files
- Windows: Commits and amendments now preserve executable permissions
- macOS: Newly created symlinks, hard links and APFS clones now appear promptly
New Contributors
* @bzbetty made their first contribution in https://github.com/gitbutlerapp/gitbutler/pull/16136
* @juanibiapina made their first contribution in https://github.com/gitbutlerapp/gitbutler/pull/16324
* @RaphaelFakhri made their first contribution in https://github.com/gitbutlerapp/gitbutler/pull/16406
* @ZainnQureshii made their first contribution in https://github.com/gitbutlerapp/gitbutler/pull/16041
Full Changelog: https://github.com/gitbutlerapp/gitbutler/compare/release/0.22.3...release/0.23.0
Downloads
Download bins from https://gitbutler.com/
release/0.22.32026-08-29
GitButler 0.22.3 是一个纯修复版本,共处理三处问题:在项目未连接 forge 集成的情况下同步时,不再误报 GitHub/GitLab 认证错误;向 GitHub 发布拉取请求失败时,改回展示 GitHub 返回的具体原因,而不是之前那句让人摸不着头脑的「422 Unprocessable Entity」;另外修复了 0.22.2 引入的回归——部分场景下应用会用回退的提交者信息,覆盖你配置好的 Git 身份。升级后提交记录的作者信息将严格遵循本地 Git 配置。
release/0.22.22026-08-28
Changes
- Updating the workspace now fast-forwards a local target branch like main after its remote branch advances
Fixes
- 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
CLI
- but diff --tui is now but tui --diff
- but diff --no-tui and but config ui have been removed
TUI
- 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
New Contributors
* @macgyver13 made their first contribution in https://github.com/gitbutlerapp/gitbutler/pull/15611
Full Changelog: https://github.com/gitbutlerapp/gitbutler/compare/release/0.22.1...release/0.22.2
Downloads
Download bins from https://gitbutler.com/
release/0.22.12026-08-24
GitButler 本次更新在界面上补了不少实用细节:按住 ⌘ 选中项目会提示将在新窗口打开;分支右键菜单直接提供「Create PR」和「Land」,不再受「Land branches directly」设置影响;目标分支更新与未提交工作冲突时会保留双方版本、标记冲突文件供手动确认。
修复方面覆盖范围很广——拖动分支时工作区意外滚动、落分支后跟踪文件被误删、GitHub 报错只显示解码失败、rebase 误移标签、CLI 提交后界面残留旧文件、非标准端口 SSH 自托管仓库的链接 URL 错误、squash 合并后工作区更新失败、推送成功被误报为失败、GitLab/GitHub 项目分页不全、PR 卡在「mergeability is unknown」等,另有分支视图与项目删除后的错误提示修正。
CLI 变化显著:新增 but resolve conflicts 与 but resolve apply,无需检出即可处理冲突提交;but commit 可选择栈中任意分支;but move 支持把分支叠加到另一分支;but pick 增加 --branch、--above、--below;but uncommit 可将提交退回未提交状态并删除分支;新增 c、m、s 三个别名,并自动识别终端明暗主题。but land 成功后会同步删除推送远程上的分支,but pull 也与界面行为一致,冲突时保留两份版本。
release/0.22.02026-07-30
GitButler 0.22.0 接入 GitHub 原生堆叠式 PR:已开通的仓库自动改用该机制,否则仍靠描述尾部标记;每个项目可单独选择是否往 PR 描述写入堆叠元数据。cherry-pick 遇冲突不再中断,改为生成冲突提交。
CLI 属破坏性更新:commit、amend、squash、discard、move 重做,rub、stage、unstage 被删(but rub
release/0.21.22026-07-22
GitButler 0.21.2 修复了四个问题:升级后,旧版本遗留的 PR 缓存可能让工作区无法正常打开,这一 0.21.1 引入的回归现已解决;从上游更新分支偶发失败的问题也一并修掉。Bitbucket 用户此前在部分情况下构建状态检查加载不出来,本次更新处理了该情况。另外,不属于堆叠(stack)的 PR 页脚不再被错误加上“part 1 of 1 in a stack”的标识。
release/0.21.12026-07-21
GitButler 0.21.1 把 Bitbucket Cloud 升为一等平台,应用内即可创建、更新、合并 PR 并查看 CI 状态,but 命令行也接入了同一套能力。
界面部分:顶部项目选择器按最近使用排序,分支列表支持用分支名或编号查找 PR,提交详情补充了 change ID,C/C++ 头文件图标已修正。TUI 的详情视图改成可操作——标记、丢弃、提交、移动变更都能就地完成,粒度细到单个 hunk 和已提交文件;帮助视图可搜索,按 y 复制 change ID,并修复了命令模式不在当前项目目录执行的问题。
CLI 改动较多:but status、commit、reword 等改用 change ID(rebase 后依然稳定)识别提交,不再依赖 SHA;自动识别更多 AI 代理;pull、resolve、status 会逐步引导解决冲突,commit 失败时点名冲突依赖所属分支;新增 but config push-remote [remote] 查看或设置推送远端;uncommit 可跨多个提交与分支一次性撤回;absorb 源无效时报错,不再静默全量吸收;新分支排到列表顶部。
另修复了更新横幅关闭后失效、未合并文件导致操作失败、撤销堆栈误报"分支未找到"、恢复删除的提交失败、重复分支名产生幽灵分支头,以及 Windows 深层链接等问题。
release/0.21.02026-07-06
GitButler 0.21.0:新增「直推目标分支」工作流,可跳过 PR/Merge Request 直接落地分支,桌面端在项目设置中开启,命令行为 but land <branch>。同时支持用 AI 解决冲突提交(右键触发),并可向 GitLab 工作区提交 MR,包括来自 fork 的请求。修复方面:撤销操作残留虚假未提交改动、分支叠加报「Invalid parent delimitation」、上游集成弹窗刷新时崩溃及步骤列表无法滚动、fork PR 使用错误 SSH URL、checkout 误删目录等。CLI 移除 but merge,改由 but land <branch> --yes 承接;but resolve <commit> 新增 --ai 参数。TUI 大 diff 性能大幅提升,新增 diff 统计显示、跳转模式,方向键与 hjkl 行为统一。