mcpField
P
pull-changes-resolve-conflicts

pull-changes-resolve-conflicts

github.com/cognitedata开发174 次安装
代码仓库

关于 pull-changes-resolve-conflicts

面向 Git 团队的冲突处理技能,用于整合分支或诊断未合并路径。它要求先分析并按影响排序提出建议,获得确认后才能编辑解决冲突。

主要功能

  1. 01编辑前分析冲突
  2. 02按影响排序报告
  3. 03解决前征求用户确认
  4. 04提供合并与变基流程指引

适用场景

  1. 01将 main 整合到功能分支
  2. 02检查合并或变基后的冲突
  3. 03规划重叠改动的解决方案

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cognitedata/dune-skills --skill pull-changes-resolve-conflicts

安装后在 Claude Code 中输入/pull-changes-resolve-conflicts确认已加载。

附带文件reference.md

详细介绍

拉取更改并解决合并冲突

将其他分支(通常是 main)合并到当前功能分支时,或 git status 显示合并或变基后存在未合并路径时,使用此技能。适用于任何基于 Git 的团队工作流;Dune/React 应用是常见场景,冲突通常集中在应用外壳和共享库中。

目标

  • 保留当前分支上有意保留的工作;不要未经分析就假定“main 优先”或“我们这边优先”。
  • 在编辑解决任何冲突之前,先让用户明确了解需要权衡的事项。
  • 按影响程度排序讨论内容:先讨论结构、功能、API 和数据模型变更,再讨论样式、文案或间距。

硬性规则

  1. 不得静默解决 —— 在用户同意方案(或明确表示“采用你的建议”)之前,不得删除 <<<<<<< / ======= / >>>>>>>,也不得对存在冲突的文件运行 git add。
  2. 遇到冲突就暂停 —— 如果合并或变基引入了冲突,先暂停并报告;除非用户明确要求,否则不得通过整份选用某一侧来草率处理大型文件。
  3. 优先考虑影响 —— 呈现冲突时,按以下类别大致分组并排序:
    • P0 — 结构 / 产品: 删除路由、删除模块、移除功能、更改数据或 API 契约、SDK 或架构变更、身份验证或路由外壳。
    • P1 — 行为: 逻辑、钩子、查询、筛选器、错误处理、加载状态。
    • P2 — UI 结构: 布局区域、新增或移除的版块、导航。
    • P3 — 呈现: 设计令牌、间距、类名、文案调整。

工作流

1. 拉取并集成(或诊断)
  • 除非用户要求变基,否则优先运行 git fetch,然后运行 git merge origin/main(或指定的分支)。
  • 如果合并已在进行中,运行 git status 并列出所有未合并文件。
2. 向用户报告冲突(明确说明)

清晰列出:

  • 分支状态: 当前分支、目标分支(例如 origin/main),以及合并还是变基。
  • 未合并文件: 仅列出路径;之后可选运行 git diff --name-only --diff-filter=U。
  • 逐文件说明(简短): 根据路径和 git diff(不进行解决),用一行说明差异内容(例如“AlertsPage — 布局 + 新的数据范围”)。
3. 编辑前先分析

综合使用以下所有信息:

  • 对话历史 —— 用户或团队希望在此分支上交付什么?
  • 代码库线索 —— 如有产品或架构文档(例如 PRD.md)、当前分支的近期提交、文件归属信息(例如大型功能模块还是共享 lib/)。
  • 冲突区块 —— 合并期间使用 git show :2:path(我们这边)与 git show :3:path(对方)进行比较,或阅读冲突标记;识别重复或彼此独立的更改。

将每个冲突区域归类为:

  • 彼此独立 —— 可安全组合(例如导入排序 + 新属性)。
  • 相互重叠 —— 必须择一或手动合并(相同行上的更改)。
  • 存在损坏风险 —— 存在重复区块(不良合并后常见);标记并建议以其中一侧为基础重建,再手动重新应用另一侧的意图。
4. 提出建议并提问(必须)

向用户说明:

  1. 摘要表格或要点 —— 文件 → 建议采用的一侧或“手动合并” → 一句话说明理由。
  2. 按 P0 → P3 排序 —— 优先指出任何会移除功能或改变公开行为的内容。
  3. 明确提问 —— 说明所有不确定之处(例如:“保留 main 的全局行为,还是分支上的限定范围版本?”)。
  4. 询问用户的处理方向 —— 例如:“请回复:(a) 按照建议处理;(b) 文件 X 保留分支版本;(c) 文件 Y 保留 main 版本;(d) 中止合并。”

只有在用户确认(或给出明确的文件对应方案)之后,才应用解决方案:

  • 优先进行小范围、精准的编辑;尽可能保留双方意图。
  • 再次运行 git status;确保没有残留冲突标记;运行用户关注的已修改区域测试或 lint。
5. 如果用户想要中止操作
  • 根据情况运行 git merge --abort 或 git rebase --abort;确认用户知晓,这会丢失该操作中正在进行的集成状态。

反模式(请勿这样做)

  • 未经用户批准,就对整个仓库选择 --ours / --theirs。
  • 因为主分支改动了同一个文件,就通过删除功能分支的工作来“解决”冲突。
  • 将冲突列表隐藏在冗长的代码转储中,而不提供简短的摘要。
  • 先修复影响较小的风格冲突,却让 P0 决策悬而未决。

快速参考

  • **合并时 ours 与 theirs 的区别:**阶段 2 = 当前分支(HEAD),阶段 3 = 传入的分支(MERGE_HEAD)。如有需要,可使用 git checkout --conflict=merge <file> 进行验证。
  • **全栈或 Dune 应用中常见的高冲突路径:**根应用外壳、顶部导航、路由模块,以及共享的 lib/ 或 hooks/。

可选的命令片段和合并消息模板,请参阅 reference.md。

评论

支持 Markdown