用途
Resolve Git Conflicts 用于在命令行中完整处理 Git 冲突,适用于 merge、rebase、cherry-pick 或 stash 操作产生的冲突。其目标流程为:分析 base/ours/theirs,决定保留或合并哪些改动,验证代码可用,然后在任何提交或继续操作之前停下,等待人工审查。
主要能力与工作流程
- 理解冲突成因:使用
git status -sb与git log --oneline --decorate -n 20识别当前操作及相互竞争的提交。 - 分析所有版本:通过
git show :1:PATH(base)、:2:(ours)、:3:(theirs)查看各版本,用git diff --ours PATH和git diff --theirs PATH了解意图。 - 显式选择并解决冲突:移除冲突标记,在 ours、theirs 或组合结果之间做出选择。倾向于最小化、保留原意的编辑,由工具直接应用改动,并在回复中记录理由,不要求用户自行编辑。
- 验证代码可用:如果项目定义了构建、测试或 lint 命令则运行;若没有,则运行可用的最小冒烟检查。
- 交接审查:在改动已暂存并验证后停止,不执行
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 与使用上下文就自动接受某一侧。
限制
该工具明确在完成暂存与验证后停止,不负责提交或继续操作;关于收费、价格、支持平台等具体信息暂未提供。