返回精选库
resolving-merge-conflicts·开发与工程

resolving-merge-conflicts 使用指南:按修改意图解决 Git 冲突

本文目录

结合提交、PR 和需求背景处理进行中的 merge 或 rebase 冲突,再运行检查完成操作。

安装与准备

在项目目录的终端执行以下命令,安装后在 Claude Code 中输入下方提示。这里选择项目内的可编辑文件安装。

命令
npx skills@latest add mattpocock/skills --skill resolving-merge-conflicts --agent claude-code

使用 Codex 时,把安装命令最后的 claude-code 换成 codex,对话里把 /resolving-merge-conflicts 换成 $resolving-merge-conflicts。如果使用完整的 Claude Code 插件,则选择 /mattpocock-skills:resolving-merge-conflicts,不要再重复安装文件版本。

适用于已经进入冲突状态的 Git 仓库。先了解当前分支、正在合并的目标以及需要保留的修改。这个 Skill 的默认流程会暂存并提交、继续 rebase,开始前要确认工作范围。

第一次使用

把下面的场景和路径替换成你的项目情况,在 Agent 对话里输入:

提示词
/resolving-merge-conflicts
当前是合并 main 时的冲突。我的分支添加导出字段,main 修改了权限检查。请保留权限校验和新字段的意图,查看两边提交背景后解决,并运行项目检查。

怎样推进任务

理解冲突发生的位置

先检查 Git 状态和冲突文件,辨认这是 merge 还是 rebase。把提交信息、关联 PR 和需求作为背景。单纯选择 ours 或 theirs 很容易保留导出字段却丢失权限检查,或反过来。

逐块保留业务意图

让 Agent 解释每个冲突块两边分别想改变什么,再组合兼容的行为。碰到无法同时保留的规则,回到这次合并的目标,明确采用哪一种语义;不要借解决冲突顺便增加第三种未讨论的功能。

通过检查后完成 Git 操作

运行项目已有的类型检查、测试和格式检查。对于导出例子,要覆盖有权限和无权限访问,以及新增列的数据。rebase 可能在后续提交再次停下,需要逐次处理到流程结束。

完成后检查什么

Git 状态中不应再有未合并文件,也不应仍提示 rebase 进行中。查看最终 diff 和相关测试结果,确认两边需求都保留,而不只是冲突标记消失。

常见问题

能用来决定是否放弃这次合并吗? 它的默认目标是完成冲突解决;是否中止或重做属于另一个决策。

所有检查通过就肯定没问题? 自动化检查只覆盖已有断言,仍要对照两边需求阅读修改。

会发到远程吗? 本身描述的是完成本地合并或 rebase;推送应单独明确。

用一次配置冲突检查两边意图

假设你的分支新增邮件通知开关,主分支同时把默认通知改为关闭。可以输入:“当前 rebase 停在通知配置冲突。请先读双方提交与关联需求,保留新的用户开关,同时遵守主分支的关闭默认值;不要发明第三套通知规则。完成每个冲突后运行现有通知测试,继续到 rebase 结束。”先从 Git 状态确认实际操作类型和剩余提交。

验收不能只看冲突标记消失:新用户默认关闭、旧用户已有选择被保留、切换开关后发送行为符合规则,这三种行为都要在合成后的代码里说得通。若某一处根本无法同时保留两边,要求说明舍弃了哪一项及原因。还有 rebase 进行中时,不要把当前文件的绿色测试误报为全部完成。

rebase 卡在编辑器时

确认冲突标记已清除、测试已跑且将要保留的提交说明无误之后,再继续 rebase。有使用者在这个环节遇到 git rebase --continue 启动交互编辑器,Agent 因等待输入而长时间停住。若你看到进程没有返回,先判断是不是编辑器在等待;需要非交互继续时,确认提交信息后为本次命令设置合适的 GIT_EDITOR,再核对 git status、提交历史与测试结果。不要把“命令仍在运行”当作冲突已解决。

你的首次任务进行得怎么样?

选择项通过网站统计帮助我们了解常见卡点。屏蔽统计可能导致无法送达;具体问题请通过邮件反馈。

参考来源

  1. resolving-merge-conflicts — SKILL.mdmattpocock
  2. mattpocock/skills — READMEmattpocock
  3. resolving-merge-conflicts 官方使用说明Matt Pocock
  4. resolving-merge-conflicts blocks on git rebase --continueRianico
发现过期或有误的信息?告诉我们