Git Reconciler 是一个用于将工作分支与 main/master 安全同步的技能,其核心目标是在合并之前检测冲突,避免直接合并带来的意外问题。
主要能力
该技能提供一套完整的同步流程:检查当前状态、识别主分支、拉取远程更新、分析分叉情况、检测潜在冲突、建议合并策略、执行同步、处理冲突以及验证结果。同时,它还包含对 worktrees 工作模式的支持。
使用方式
技能按照以下步骤执行:
第 1 步:检查当前状态。运行 git status、git branch --show-current、git status --porcelain。如果存在未提交的改动,会询问用户:先提交?暂存(stash)?还是丢弃改动?
第 2 步:识别主分支。通过 git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@' 检测是 main 还是 master(本地检测,无网络调用)。如果失败(HEAD 未设置),则用 git branch -r | grep -E "origin/(main|master)$" | head -1 | sed 's/.*origin///'。
第 3 步:拉取远程改动。运行 git fetch origin main(或根据检测结果用 master)。
第 4 步:分析分叉。用 git log HEAD..origin/main --oneline 查看 main 上有而当前分支没有的提交;用 git log origin/main..HEAD --oneline 查看当前分支上有而 main 没有的提交;用 git rev-list --left-right --count origin/main...HEAD 查看分叉程度,输出为 <main 上的提交数> <分支上的提交数>。含义:0 0 表示已同步,无需操作;5 0 表示 main 新增 5 个提交,分支落后;0 3 表示当前分支有 3 个提交而 main 没有新增(只需 push);5 3 表示双向往分叉。
第 5 步:检测潜在冲突。用 git diff --name-only HEAD...origin/main 列出 main 上修改的文件;用 git diff --name-only origin/main...HEAD 列出当前分支修改的文件;比较两个列表,若有共同文件则存在冲突风险。可在不合并的情况下用 git merge-tree --write-tree HEAD origin/main 验证冲突(Git 2.38+),退出码非零表示有冲突;旧版本可用 git merge-tree $(git merge-base HEAD origin/main) HEAD origin/main,若输出包含 <<<<<< 或 >>>>> 则会有冲突。
第 6 步:建议策略。向用户呈现两种选项:选项 A,Merge(推荐用于共享分支),运行 git merge origin/main,保留完整历史,创建合并提交,对多人协作的分支更安全;选项 B,Rebase(推荐用于个人分支),运行 git rebase origin/main,历史线性,重写提交(若已 push 则需强制推送),适合在提交 PR 前整理干净的分支。随后询问用户偏好。
第 7 步:执行同步。若选择 MERGE,运行 git merge origin/main;若选择 REBASE,运行 git rebase origin/main。
第 8 步:处理冲突(若发生)。用 git diff --name-only --diff-filter=U 列出冲突文件并展示给用户,提供选项:手动逐个文件解决、中止 merge(git merge --abort)或中止 rebase(git rebase --abort)。对每个冲突文件可运行 git diff <文件> 查看差异。
第 9 步:验证结果。运行 git status 和 git log --oneline -5。
Worktrees 支持
如果用户使用 worktrees(.worktrees/ 模式),技能会检测是否处于 worktree 中(git rev-parse --is-inside-work-tree、git worktree list),并注意:main/master 通常在主仓库而非 worktree 中;在 worktree 中 fetch 同样有效;若 worktree 共享对象,rebase 可能有问题。worktree 流程为:pwd 确认位于 .worktrees/<分支>,然后 git fetch origin main、git merge origin/main。
适用场景
需要将个人工作分支与主干安全对齐、在合并前预判冲突、整理提交历史以便提交 PR,或在 worktrees 模式下协作开发的场景。
限制
技能文档未提供关于性能、平台兼容性或收费方面的说明。其中部分命令(如 git merge-tree --write-tree)需要 Git 2.38+。详细示例和快速命令表需查阅 references/examples.md 与 references/quick-ref.md,这些内容暂未提供。