skills/git/git-rebase/SKILL.md
把当前分支 rebase 到指定源分支。强制先建备份分支保护(不可逆兜底),rebase 前 fetch 确保用源分支的远端最新版为基,冲突半自动解决(当前分支有实质改动的以当前为准、否则以源分支为准),拿不准时停下用 AskUserQuestion 问用户、绝不自主决定。触发词:「rebase 到 X」「变基到 X」「把分支基于 X 重放」。
npx skillsauth add lazygophers/ccplugin git-rebaseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
rebase 改写历史、不可逆。铁律:先备份 → 拉源分支最新 → 半自动解冲突 → 拿不准必停问。
git branch backup/<当前分支>-<时间戳>。用户强制要求,任何情况不跳过。git fetch,以 origin/<源分支> 为 base,禁用本地陈旧副本。SRC=<源分支> # 缺省 → 报错要求指定,不猜(禁默认 main/master)
CUR=$(git branch --show-current)
git status --porcelain # 必须干净;脏 → 先 git-commit 或 git stash(记下,rebase 后 pop)
git branch "backup/${CUR}-$(date +%Y%m%d-%H%M%S)"
回显备份分支名。这一步失败则整个流程 STOP(无备份不 rebase)。可选开 rerere 记住冲突解法(见 references/conflict-resolution.md §rerere)。
git fetch origin "$SRC"
git rebase "origin/$SRC"
每个冲突文件按下表判定。⚠️ rebase 中 --ours/--theirs 与直觉相反(HEAD 是被 replay 到的 base=源分支):
| 情形 | 语义 | 命令(rebase 语境) |
| --- | --- | --- |
| 该文件只有当前分支动过 | 以当前分支为准 | git checkout --theirs <file> ← theirs=当前分支的提交 |
| 该文件只有源分支动过 | 以源分支为准 | git checkout --ours <file> ← ours=源分支/base |
| 两边都实质改同一逻辑 | 拿不准 | 🔴 STOP,AskUserQuestion 列冲突 hunk 让用户裁,禁自主 |
判定「有实质改动」:git log origin/$SRC..<backup 分支> -- <file> 看当前分支侧是否有针对该文件的提交(空=只源分支动过)。方向记忆表 + -s ours 剧毒警告见 references/conflict-resolution.md。
解完一个文件:
git add <file>
git rebase --continue # 全部解完后
git log --oneline -5 # 确认重放结果
回显:rebase 完成 + 备份分支名(验证无误后可 git branch -D 删,未验证前保留)。已推远端的分支需 git push --force-with-lease(禁裸 --force,见 references/recovery.md §push)。
| 触发条件 | 一线修复 | 仍失败兜底 |
| --- | --- | --- |
| 建备份分支失败(重名) | 时间戳加秒/加 -2 重试 | 建不成 → STOP,绝不无备份 rebase |
| rebase 冲突拿不准 | 🔴 STOP + AskUserQuestion 列 hunk | 用户也不确定 → git rebase --abort 回原状,保留备份,报「需人工介入」 |
| --continue 报「no changes」 | 该文件应为空提交 → git rebase --skip | skip 后仍乱 → abort 恢复 |
| 重放中途想放弃 | git rebase --abort(回到 rebase 前) | abort 也异常 → git reset --hard backup/<...> 用备份恢复 |
| 已 rebase 完才发现选错 | git reset --hard backup/<...> 回退 | 备份也删了 → git reflog 找 rebase 前 HEAD(见 recovery) |
| 当前分支已推远端且被他人共享 | 告知 rebase 改历史会致他人 --force 后冲突,确认后再继续 | 用户不接受 → 改用 git-merge |
| fetch 失败(网络/权限) | 重试 fetch;确认 remote 名正确 | 拉不到 → STOP,不拿本地陈旧分支 rebase(违硬规 2) |
--force-with-lease 推,可能影响协作者(会告知)。-i 交互式(改提交顺序/squash),那是另一场景。tools
UI/UX 与布局设计——做界面布局/结构/导航/组件/交互的设计决策。触发:做UI/UX/布局/排版/导航/组件/交互/栅格/响应式/图表选型/字体配对。按媒介路由 HTML/Web、原生 App(iOS/Android/桌面)、CLI、TUI。需后端动态系统不适用;配色/主题/色板走姊妹 skill design-color。
tools
主题与配色设计——做颜色搭配/调色板/主题/品牌色阶/暗模式的设计决策。触发:选配色/调色/主题/色板/品牌色/暗模式/对比度/色盲/UI风格。按媒介路由 HTML/Web(CSS变量)、原生App(平台token)、CLI(ANSI)、TUI(真彩/256/16降级)。保证可访问性(对比度/色盲安全)。需后端动态系统不适用;UI/UX 布局/组件/交互走姊妹 skill design-uiux。
tools
跨任意组件(plugin/skill/agent/command)的验证驱动优化循环纪律 skill。当用户要优化某个已有组件却无明确方向、或要防止改了反而更差(自评乐观偏差 / 多维同改归因失效 / 为凑分加废话膨胀)、或要把一套通用「评分→单变量改→改后验证严格更好才留否则回滚→触顶停」的纪律套到任意组件上时使用。管优化过程本身的纪律(validation gate / ratchet / 独立验证 / 触顶停),不评单组件深度(交 skill-dev),不查插件接线(交 plugin-dev)。仅手动 /optimize-any 触发。
data-ai
两层规则记忆 (基于 .skein/spec)。planning 时 recall 召回相关规则、task finish 后 sediment 沉淀学习 + prune 自动精简过期/重复/断链规则。core 常驻硬规 + recall 按需召回, 经判定门自动写盘 (不逐次问用户)。产出 .skein/spec 下 core/recall 规则文件 + index。另支持空仓 bootstrap 播种规则基线、记忆大面积失效 (大重构/换栈) 时 reconstruct 可逆归档后按项目类型分型重建、maintain 手动体检 (超预算/stale/断链/重复/废弃, --apply 自动修复)、auto-fix (Stop hook 写 .pending-fix 标记 → main 派 skein-specer bg 跑 maintain --apply 全自动修, 断链只报告)。