用途
该技能用于在 Git 合并出现冲突时,智能地合并两个分支的改动,同时保留双方改动的意图。它主张不直接动手解决冲突,而是在用户提到需要解决合并冲突时立即调用本技能。
主要能力
该技能采用“计划优先”的方式,包含以下核心原则:
- 执行前计划:始终先创建结构化的解决方案计划,并在做出更改前获得用户批准。
- 优先保留双方更改:除非直接矛盾,默认保留双方改动。
- 合并而非选择:尤其适用于导入、测试和配置。
- 重新生成生成文件:绝不手动合并生成文件,始终从源文件重新生成。
- 解决前备份:对删除-修改类文件,先创建备份。
- 用测试验证:解决后始终运行测试。
- 解释所有解决方式:对每个解决的冲突,提供一行解决策略说明。
- 不清楚时询问:当从差异中无法明确正确解决方式时,向用户呈现选项并请求选择。
使用方式
技能工作流分为七个步骤:
- 评估冲突情况:运行
git status等初始检查,识别并分类所有冲突文件(常规文件冲突、删除-修改冲突、生成文件冲突、测试文件冲突、导入/配置冲突、二进制文件冲突),并收集每个文件的信息。 - 创建合并解决计划:以 Markdown 格式呈现冲突摘要、按文件的解决策略(冲突类型、策略、理由、风险、行动项)、执行顺序(阶段1删除-修改文件、阶段2生成文件、阶段3低风险合并、阶段4高风险合并、阶段5验证)、需要的问题/决策及验证步骤,等待用户批准。
- 处理删除-修改文件:运行
.forge/skills/resolve-conflicts/scripts/handle-deleted-modified.sh,该脚本会创建带时间戳的备份、分析可能的迁移目标、生成分析报告并自动解决删除状态。 - 执行解决计划:按计划中的执行顺序,对每个冲突文件应用相应的解决模式,并对每个解决的冲突提供一行说明,同时向用户报告进度。
- 验证解决结果:运行
.forge/skills/resolve-conflicts/scripts/validate-conflicts.sh,检查剩余冲突标记、未合并路径、删除-修改冲突及合并状态文件。 - 编译与测试:根据项目类型运行测试命令(如
cargo test、npm test、pytest等),若测试失败则排查合并代码或冲突解决问题,并反复运行直至全部通过。 - 完成收尾:审查缓存的更改并以描述性信息提交,提交信息中包含执行计划摘要和关键决策。
解决模式
针对不同类型的冲突,技能提供对应的解决模式:
- 导入/依赖:合并双方的唯一导入、去重、按模块分组。
- 测试:包含双方所有测试用例、合并测试夹具,必要时重命名以避免冲突。
- 生成文件:识别生成源,选择任一版本后从源重新生成并暂存(如
cargo update、npm install、protoc等命令)。 - 配置文件:合并双方所有键,对冲突值选择更新/更安全/符合生产需求的值,并在提交信息中记录选择。
- 代码逻辑:分析双方改动意图,若正交则合并,若冲突则选择匹配需求的方案并记录决策。
- 结构/类型定义:合并双方所有字段,若类型冲突则分析选择更合适的类型,修复编译错误并更新测试。
- 文档:合并双方的文档章节。
- 二进制文件:无法合并,选择其中一个版本(
git checkout --ours或--theirs)。
适用场景
该技能适用于 Git 合并过程中出现各类冲突的场景,包括常规文件冲突、删除-修改冲突、生成文件冲突、测试文件冲突、导入/配置冲突、二进制文件冲突、大规模重命名/重构冲突以及子模块冲突。
限制
该技能针对无法从差异中明确解决的冲突,会向用户呈现编号选项并请求决定,因此需要用户在关键决策点进行交互。对于二进制文件,技能无法合并,只能选择其中一个版本。具体的分类细节、收费情况、平台支持范围等事实暂未提供。