名称: 从技能仓库拉取更新 描述: 同步本地技能仓库与上游obra/superpowers-skills的更改 使用时机: 当会话开始指示有新的上游技能可用时,或手动更新到最新版本时 版本: 1.2.0
从上游更新技能
概述
拉取并合并来自obra/superpowers-skill的上游更改到您的本地技能仓库,同时保留您的个人修改。
开始时宣布: “我正在使用更新技能技能与上游同步。”
前提条件
您的技能仓库必须配置了跟踪分支。插件会自动设置此功能(无论是作为具有origin远程的复刻,还是具有upstream远程)。
过程
步骤 1: 检查当前状态
运行:
cd ~/.config/superpowers/skills
git status
如果工作目录是脏的: 继续到步骤 2(暂存更改) 如果是干净的: 跳过到步骤 3
步骤 2: 暂存未提交的更改(如果需要)
运行:
git stash push -m "上游更新前的临时暂存"
记录: 是否暂存了更改(您稍后需要取消暂存)
步骤 3: 确定跟踪远程并获取
首先,检测使用哪个远程:
TRACKING_REMOTE=$(git rev-parse --abbrev-ref --symbolic-full-name @{u} 2>/dev/null | cut -d'/' -f1 || echo "")
然后从适当的远程获取:
if [ -n "$TRACKING_REMOTE" ]; then
git fetch "$TRACKING_REMOTE" 2>/dev/null || true
else
git fetch upstream 2>/dev/null || git fetch origin 2>/dev/null || true
fi
预期: 从跟踪远程(或回退到upstream/origin)获取最新提交
步骤 4: 检查新内容
运行:
git log HEAD..@{u} --oneline
显示给用户: 正在拉取的新提交列表
注意: @{u} 指的是您当前分支的上游跟踪分支
步骤 5: 合并更改
首先,尝试快速前向合并(最干净的选项):
git merge --ff-only @{u}
如果快速前向成功: 跳过到步骤 7(快速前向不可能有冲突) 如果快速前向失败: 您的分支已分歧。尝试常规合并:
git merge @{u}
如果合并成功且干净: 继续到步骤 7 如果发生冲突: 继续到冲突解决
步骤 6: 处理合并冲突(如果有)
如果有冲突:
- 运行
git status查看冲突文件 - 对于每个冲突,向用户解释两个版本的更改内容
- 询问用户保留哪个版本或如何合并
- 编辑文件以解决冲突
- 对每个文件运行
git add <已解决文件> - 运行
git commit完成合并
步骤 7: 取消暂存更改(如果在步骤 2 中暂存了)
如果您暂存了更改:
git stash pop
如果与取消暂存的更改有冲突: 帮助用户解决它们
步骤 8: 验证一切工作正常
运行:
${SUPERPOWERS_SKILLS_ROOT}/skills/using-skills/find-skills
预期: 技能列表正确显示
步骤 9: 宣布完成
告诉用户:
- 合并了多少新提交
- 是否解决了任何冲突
- 他们的暂存更改是否已恢复
- 技能现在是最新的
常见问题
“已经是最新的”: 您的本地仓库是最新的,无需操作
“致命错误: 未配置上游”: 您的分支未跟踪远程分支。检查 git remote -v 查看可用远程,然后使用 git branch --set-upstream-to=<远程>/<分支> 设置跟踪
分离的 HEAD: 您不在分支上。询问用户是否要创建分支或检出主分支。
快速前向失败,分支分歧: 您的本地分支有远程没有的提交。需要常规合并,可能导致冲突。
记住
- 合并前总是暂存未提交的工作
- 清楚地向用户解释冲突
- 更新后测试技能是否工作
- 保留用户的本地提交/分支