
如何用 GitButler but resolve 命令逐个解决冲突提交并避免使用 git 写命令【免费下载链接】gitbutlerThe GitButler version control client, backed by Git, powered by Tauri/Rust/Svelte项目地址: https://gitcode.com/GitHub_Trending/gi/gitbutler在 GitButler 工作区执行but pull或but move等历史编辑操作之后summary 里出现被标记为 conflicted 的分支或提交——这时传统做法是进入 rebase 冲突模式、用git addgit commit逐轮推进。GitButler 的冲突处理不需要这套流程整个解决过程只用两类操作——but resolve系列命令和直接编辑文件。本文的任务是把若干冲突提交逐个解决到不再剩余并且全程不运行任何 git 写命令。适用前提git 仓库已用butCLI 初始化成 GitButler 工作区未初始化时先运行but setup。无论冲突来自but pull、but move还是其他历史编辑解决流程相同。先定位哪些提交处于冲突状态在 GitButler 中冲突不会中断操作rebase 总是完成发生冲突的提交在but status里被标记为{conflicted}。冲突提交列表可以从三个入口获得历史编辑命令but move、but discard等输出中的警告but pull的 summary——它按 oldest-first 顺序列出每个冲突提交的 IDbut status——冲突提交直接带{conflicted}标记。拿到列表后一次只处理一个分支且从该分支最旧的冲突提交开始因为 finish 掉下面一个提交会 rebase 它上面的提交必须自底向上推进。主路径conflictsapply逐条解决不进入任何模式SKILL.md 给出的默认路径是一个不进模式的三步循环。1. 查看当前提交的冲突列表but resolve conflicts branchbranch替换为你要处理的分支名它表示该分支上最旧的冲突提交。省略分支名时默认选第一个冲突分支输出会告诉你它选的是哪个。输出把该提交的所有冲突按文件编号列出每个冲突分三段ours提交被 rebase 到的新基底base共同祖先theirs提交自身的版本。输出同时说明是否还存在其他冲突提交。2. 每条冲突用一条 apply 命令解决下文命令中的path是输出里的冲突文件路径N是上一条but resolve conflicts输出中该冲突的编号两者都直接从当前输出复制。合并/混合内容最常见的情况——两侧意图都要保留把合并后的内容经 stdinheredoc传给but resolve apply path:N或用--file指定文件# 下方 heredoc 内容替换为你合并后的完整冲突区域内容不得包含冲突标记 cat EOF | but resolve apply path:N 这里填入合并后的完整冲突区域内容 EOFbut resolve apply path:N --file f # f 为保存了合并内容的文件传入的内容会替换整个冲突区域内容中绝不能带冲突标记。整段取一侧but resolve apply path:N --ours # 取新基底一侧 but resolve apply path:N --theirs # 取提交自身版本不带编号的裸path则把该侧应用到这个文件里的全部冲突。交给已配置的 AI 模型合并but resolve apply path:N --aiskill 文档明确建议如果你自己有上下文优先写自己的合并内容——你通常比模型更有上下文。有多个冲突分支时apply默认作用于与conflicts相同的提交可用--commit branch固定目标。3. 循环直到无冲突回到第 1 步继续but resolve conflicts branch直到它报告该提交已无冲突。两个要点这一循环里提交 id 不稳定——每次 apply 都会重写提交。分支名是稳定的所以全程用分支名指代不要记录提交 id。部分进度是允许的一个提交还剩未解决的冲突时它保持{conflicted}且恰好就是剩下这些冲突。替代路径需要对解决结果跑代码时用编辑模式reference.md 定义的编辑模式路径只在必须针对解决结果运行代码在该提交上构建/测试时使用but resolve commit-id——进入解决模式打印带行号的冲突区域commit ID 取自but pullsummary 或but status。自己编辑文件删掉所有冲突标记——、|||||||冲突是 diff3 风格存在共同祖先段、、——并保留正确内容。这一步不可跳过也不要用but amend处理冲突提交多个文件冲突时but resolve status可重新列出剩余冲突文件。but resolve finish收尾。其结果会报告残留的冲突标记、幸存的未提交变更、每个仍冲突的提交以及下一条确切的but resolve id命令——因此不需要额外的后续检查。中途想放弃本轮用but resolve cancel返回工作区模式加--force会丢弃本轮解决中已做的修改。多个提交冲突时按 oldest-first 逐个重复上述步骤。未提交文件里的冲突冲突不只出现在已提交提交上but status也会把带未解决合并冲突的未提交文件标记为{conflicted}。这类文件被排除在可提交变更之外也不在but resolve模式内。处理方式把文件编辑成你想要的内容或删除它然后按当前状态标记已解决but resolve src/lib.rs # 文档示例path 为冲突文件路径可一次传多个标记后该文件按普通未提交变更显示。为什么不能用 git 写命令这是文档中的硬性规则解决冲突期间绝不使用git add、git commit、git checkout --theirs/--ours或任何 git 写命令只允许but resolve命令加直接文件编辑。它属于 GitButler 的总原则——所有写操作用butgit add/git commit/git push/git checkout/git merge/git rebase/git stash/git cherry-pick一律不跑遇到 git 写命令的需求时翻译成对应的but命令执行。只读 git 命令仍然可以用于查看状态git log、git blame、git show --stat等。解错时的回退手段文档明确说A wrong resolution is reverted withbut undo解错了直接but undo撤销。如何判断全部完成以 finish 的输出为判定点主路径的终止判定是but resolve conflicts branch报告该提交无冲突编辑模式的判定看but resolve finish的输出。官方测试快照resolve.rs中的示例输出如下说明它同时给出有无残留标记和还有哪些冲突提交两项信息✓ Conflict resolution finalized successfully! The commit has been updated with your resolved changes. No conflict markers remain in the resolved files. Workspace restored; no uncommitted changes. Remaining conflicted commits (oldest first): Branch: A ● [..] [conflict] top change Resolve the next commit with but resolve [..].以上为文档示例输出实际分支名与提交 id 以你的输出为准。若解决后仍残留冲突标记finish会给出类似✗ file.txt still contains conflict markers — resolve it again if that was not intentional的警告同样来自测试快照。当输出显示No conflicted commits remain时停止——文档明确说明此时不要运行验证用的 status只有当任务还需要完整工作区状态时才给预期清除最后一个冲突的那次 finish 加--status-after。边界与限制顺序始终从最旧冲突提交开始finish 掉下面一个提交会 rebase 它上面的提交不能自顶向下处理。指代稳定性conflicts/apply循环中提交 id 随每次 apply 变化只有分支名稳定全程用分支名。两条路径分工conflictsapply不进模式是默认路径编辑模式仅用于必须在该提交上跑构建/测试的场景。AI 是兜底but resolve commit-id --ai一次性用配置的 AI 模型解决整个提交but resolve --ai不带提交参数时按 oldest-first 解决全部冲突提交——文档将其定位为 fallback。未提交文件冲突与提交冲突是两条独立路径前者编辑文件后but resolve path标记解决后者走主路径或编辑模式不要混用。延伸阅读crates/but/skill/SKILL.mdresolve 配方与禁止 git 写命令的完整规则crates/but/skill/references/reference.mdbut resolve各子命令语法与参数crates/but/skill/references/examples.mdExample 6 冲突解决完整示例crates/but/skill/references/concepts.mdConflict Resolution Mode 概念说明【免费下载链接】gitbutlerThe GitButler version control client, backed by Git, powered by Tauri/Rust/Svelte项目地址: https://gitcode.com/GitHub_Trending/gi/gitbutler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考