ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何用 GitButler but pull 把工作区更新到目标分支最新状态并用 but pull --check 做冲突预览

如何用 GitButler but pull 把工作区更新到目标分支最新状态并用 but pull --check 做冲突预览 如何用 GitButler but pull 把工作区更新到目标分支最新状态并用 but pull --check 做冲突预览【免费下载链接】gitbutlerThe GitButler version control client, backed by Git, powered by Tauri/Rust/Svelte项目地址: https://gitcode.com/GitHub_Trending/gi/gitbutlerGitButler 工作区里的分支不是直接长在main上的而是以应用applied的方式叠在目标分支之上。当远端目标分支通常是origin/main前进后but pull会取回远端更新并把工作区里所有已应用分支 rebase 到最新的目标状态执行之前but pull --check可以先做一次不改写任何内容的演练告诉你这次更新会动哪些分支、哪些分支会冲突。本文覆盖一条完整操作链--check冲突预览 →but pull更新 → 用but status验证 → 处理冲突 → 必要时but undo回退。准备确认工作区与目标分支前提是你已安装butCLI并且当前目录是一个 GitButler 管理的工作区。普通 Git 仓库用but setup初始化为 GitButler 工作区没有 Git 仓库时加--initbut setup but setup --init # 仓库不存在时先初始化 Git 仓库启用single-branchfeature 时不需要显式 setup仓库会被延迟注册目标分支自动推断but config feature single-branch enable开启。确认but pull要追的目标分支but config target # 查看当前目标分支 but config target origin/main # 设置 fetch 目标but status里显示的 base 是最后一次 fetch 到的状态只要git log里本地或远端main领先于它那条提示Hint: origin/main moved ahead; run but pull to update the workspace就是正常的更新触发信号——目标设置并没有过期不需要重新指向直接 pull 即可。用 but pull --check 做冲突预览but pull --check是 dry-run只报告会发生什么不改动任何东西。命令参考 给出的定位是常规更新直接跑but pull即可输出会报告结果but undo可回退当用户要求预览、仓库策略要求先检查、或其他协作者的分支可能变动时才先用--check。不建议把它当成每次 pull 前的例行前检。下面是一个来自仓库测试快照的输出示例pull 测试中的文档示例实际数值随仓库状态变化Base branch: origin/main Upstream: 2 new commits on origin/main dba3edc add upstream 509b051 merge C Branch Status [ok] A [integrated] C Run but pull to update your branches逐行读法与 实现一致Base branch/Upstream目标分支及其领先提交数。上游提交最多列出 3 条超出显示... (N more)。Branch Status逐项给出每个已应用分支 pull 后的预期状态[ok]分支可干净 rebase[integrated]该分支已整体并入上游pull 会把它从本地移除[conflict - rebasable]该分支 rebase 会冲突但 pull 仍会执行冲突落在具体提交上、事后可解决JSON 输出里对应status: conflicted且rebasable: true。若未提交改动可能与更新冲突会额外打印Warning: uncommitted changes may conflict with updates.工作区已是最新时--check只打印Up to date。--check不产生任何写操作这一点有测试断言背书跑完pull --check后 HEAD 不变、integrated 分支也保留测试。需要脚本化判断时可用but --json pull --check返回upToDate、hasWorktreeConflicts和branchStatuses含status、rebasable字段见 测试。执行 but pull 更新工作区预览无阻塞项后执行更新but pull它做三件事从远端 fetch 最新数据把已应用分支 rebase 到最新目标把已完全并入上游的分支从本地清除。测试还确认了两个附带行为本地目标分支落后时会被 fast-forward 到远端测试本地目标分支若已分叉有本地独有提交pull 会保留这些提交、不强行对齐远端。成功时的输出测试快照中的文档示例Found 1 upstream commits on origin/main [..] upstream change Updating 1 active branches... Rebase successful Summary ──────── A - rebased To undo this operation: Run but undo工作区已是最新时输出No new upstream commits found与Everything is up to date不做任何改动。验证方式跑but status确认三点——底部的(common base)已推进到新的上游提交不再有N new commits的上游提示之前的Hint: origin/main moved ahead; run but pull提示消失标记(merged upstream)的分支已被移除pull输出里会写Branch X has been integrated upstream and removed locally。处理 pull 之后的冲突GitButler 里 rebase 永不中途打断冲突会落在具体提交上but status以{conflicted}标记。pull 的输出会直接给出下一步命令文档区分了三种与冲突相关的情形。分支提交冲突rebase 本身产生冲突输出是Rebase resulted in some conflictsSummary 列出冲突分支和提交 ID并给出解决入口测试快照中的文档示例Rebase resulted in some conflicts Summary ──────── A - rebased B - conflicted rou [conflict] bottom change To resolve conflicts: 1. Start with: but resolve rou. Worktree files show no conflict markers until this checks the commit out 2. Edit files to resolve the conflicts 3. Run but resolve finish to finalize the resolution解决流程命令参考but resolve rou # 进入解决模式按行号打印冲突区 # 手动编辑文件删除全部冲突标记 / ||||||| / / 保留正确内容 but resolve finish # 收尾报告残留标记和剩余冲突提交多个提交冲突时从最旧的开始逐个处理——解决下层提交会 rebase 它上面的提交。整个过程中不要使用git add、git commit、git checkout --ours/--theirs等任何 Git 写命令只用but resolve系列加直接编辑文件。解决错了用but undo回退。未提交文件的 checkout 冲突分支 rebase 干净、但工作区里未提交的编辑与结果 HEAD 冲突时pull 仍会完成输出末尾追加⚠ A conflict occurred during checkout. Run but status for more information.but status把该文件标记为{conflicted}并提示处理方式测试编辑文件到期望内容或删除它再but resolve path...标记为已解决它就变回普通未提交改动。pull 因未提交改动被拒绝SKILL.md 说明 pull 在未提交改动与更新冲突时会安全拒绝恢复方式是先把改动暂存成一个 wip 提交再拉取but commit -b branch -m wip ids # ids 从 but diff 复制 but pull but uncommit commit-id # 拉取完成后拆回未提交状态没有 stash也不要手动回退文件来绕开。回退与边界每次成功的but pull输出都带To undo this operation: Run but undobut undo回退本次更新but redo重新应用测试。边界若目标分支恰好被某个 linked worktree checkoutundo 会拒绝执行、不移动该分支。这套更新路径里不要用裸git pull或git rebase——把已应用分支 rebase 到最新目标这件事本身就是but pull的定义move、config target重指、unapply都不是正确做法。本地目标分支分叉时 pull 不强制对齐远端保留本地提交这与 fast-forward 场景是两种不同结果验证时以but status的 common base 位置为准。分支的 PR 合并落地后再次运行but pull会清理这些已落地分支并把工作区推进到新的目标状态见 工作流示例的收尾步骤随后继续用but push推送新工作即可。【免费下载链接】gitbutlerThe GitButler version control client, backed by Git, powered by Tauri/Rust/Svelte项目地址: https://gitcode.com/GitHub_Trending/gi/gitbutler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表