SuperAPI AI 工具集

resolve-git-conflicts

编程与开发

查看项目

更新于 10-16 02:21

技能介绍

用途

Resolve Git Conflicts 用于在命令行中完整处理 Git 冲突,适用于 merge、rebase、cherry-pick 或 stash 操作产生的冲突。其目标流程为:分析 base/ours/theirs,决定保留或合并哪些改动,验证代码可用,然后在任何提交或继续操作之前停下,等待人工审查。

主要能力与工作流程

  1. 理解冲突成因:使用 git status -sb 与 git log --oneline --decorate -n 20 识别当前操作及相互竞争的提交。
  2. 分析所有版本:通过 git show :1:PATH(base)、:2:(ours)、:3:(theirs)查看各版本,用 git diff --ours PATH 和 git diff --theirs PATH 了解意图。
  3. 显式选择并解决冲突:移除冲突标记,在 ours、theirs 或组合结果之间做出选择。倾向于最小化、保留原意的编辑,由工具直接应用改动,并在回复中记录理由,不要求用户自行编辑。
  4. 验证代码可用:如果项目定义了构建、测试或 lint 命令则运行;若没有,则运行可用的最小冒烟检查。
  5. 交接审查:在改动已暂存并验证后停止,不执行 git commit、git merge --continue、git rebase --continue、git cherry-pick --continue,并给出决策与涉及文件的简短摘要供审查。

决策框架

不应默认选择 ours 或 theirs,而要基于证据逐文件判断。选择前需回答:哪个版本与当前 API 和使用位置匹配?哪个版本符合最近的重构或提交意图?哪个版本被测试覆盖或修复了失败测试?哪个版本移除了废弃代码或引用?合并两者是否会造成重复或不一致行为?

版本含义:在 merge 中,ours 是当前分支,theirs 是被合入的分支;在 rebase 或 cherry-pick 中,ours 是正在应用到的分支,theirs 是被应用的提交。若仍然不明确,选择风险最小的改动并说明假设。

常用命令

  • 列出冲突文件:git diff --name-only --diff-filter=U
  • 查看冲突标记:rg -n "<<<<<<<\|======\|>>>>>>>"
  • 查看 base/ours/theirs:git show :1:PATH、git show :2:PATH、git show :3:PATH
  • 与 ours / theirs 比较:git diff --ours PATH、git diff --theirs PATH
  • 快速接受一侧:git checkout --ours PATH、git checkout --theirs PATH
  • 暂存解决结果:git add PATH
  • 若无 rg,可使用:grep -n "<<<<<<<\|======\|>>>>>>>" PATH

示例

冲突内容:

function formatUser(user) {
<<<<<<< HEAD
  return `${user.name} <${user.email}>`;
=======
  return `${user.displayName} <${user.email}>`;
>>>>>>> feature/use-display-name
}

解决后(使用新字段并保留回退):

function formatUser(user) {
  const name = user.displayName ?? user.name;
  return `${name} <${user.email}>`;
}

理由:该功能分支引入了 displayName,但现有调用方可能仍在使用 name。

常见错误

在审查交接之前就继续 merge/rebase/cherry-pick;在所有操作中都把 ours 和 theirs 固定理解为“我的分支”和“他们的分支”;在文件中遗留冲突标记或未完全解决的代码块;未检查 base 与使用上下文就自动接受某一侧。

限制

该工具明确在完成暂存与验证后停止,不负责提交或继续操作;关于收费、价格、支持平台等具体信息暂未提供。