Skip to content

Commit 5afa896

Browse files
committed
feat(claude): 新增 sync-worktree skill 用于自动化 git worktree 同步
新增 Claude Code Skill `/sync-worktree`,提供 git worktree 的状态概览、单分支/批量 rebase 同步功能。支持自定义基准分支、脏工作区安全检查以及冲突处理,简化多分支并行开发时的代码同步流程。
1 parent a983a91 commit 5afa896

6 files changed

Lines changed: 82 additions & 0 deletions

File tree

openspec/changes/sync-worktree/.openspec.yaml renamed to openspec/changes/archive/2026-02-11-sync-worktree/.openspec.yaml

File renamed without changes.
File renamed without changes.
File renamed without changes.

openspec/changes/sync-worktree/specs/worktree-sync/spec.md renamed to openspec/changes/archive/2026-02-11-sync-worktree/specs/worktree-sync/spec.md

File renamed without changes.
File renamed without changes.
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
## ADDED Requirements
2+
3+
### Requirement: 状态概览显示
4+
当用户调用 `/sync-worktree` 不带任何参数时,系统 SHALL 展示所有 worktree 的同步状态概览。概览 SHALL 包含每个 worktree 的分支名、路径、相对于 master 的领先/落后 commit 数、以及工作区是否干净。主 worktree 的分支 SHALL 被标记为基准分支。
5+
6+
#### Scenario: 展示多个 worktree 状态
7+
- **WHEN** 用户调用 `/sync-worktree` 不带参数
8+
- **THEN** 系统显示所有 worktree 的表格,包含 branch、path、ahead(领先 commit 数)、behind(落后 commit 数)、工作区状态(clean/dirty)
9+
10+
#### Scenario: 仅有主 worktree
11+
- **WHEN** 用户调用 `/sync-worktree` 不带参数,且仅存在主 worktree(无 feature worktree)
12+
- **THEN** 系统提示当前没有可同步的 feature worktree
13+
14+
### Requirement: 单分支 rebase 同步
15+
用户 SHALL 能够指定一个 worktree 分支名,系统将该分支 rebase 到基准分支(默认 master)。
16+
17+
#### Scenario: 成功同步到 master
18+
- **WHEN** 用户调用 `/sync-worktree aifeat`
19+
- **THEN** 系统在 aifeat 的 worktree 目录中执行 `git rebase master`,并报告成功结果和新 HEAD
20+
21+
#### Scenario: 分支已是最新
22+
- **WHEN** 用户调用 `/sync-worktree aifeat`,且 aifeat 已包含 master 的所有 commit
23+
- **THEN** 系统提示 "aifeat 已是最新,无需同步"
24+
25+
#### Scenario: 指定分支不存在于 worktree
26+
- **WHEN** 用户调用 `/sync-worktree nonexistent`
27+
- **THEN** 系统报错,列出可用的 worktree 分支供用户选择
28+
29+
### Requirement: 自定义基准分支
30+
用户 SHALL 能够通过 `--from <branch>` 参数指定任意本地分支作为 rebase 基准,覆盖默认的 master。
31+
32+
#### Scenario: Feature-to-feature 同步
33+
- **WHEN** 用户调用 `/sync-worktree aifeat --from hotfix`
34+
- **THEN** 系统在 aifeat 的 worktree 目录中执行 `git rebase hotfix`
35+
36+
#### Scenario: 指定的基准分支不存在
37+
- **WHEN** 用户调用 `/sync-worktree aifeat --from nonexistent`
38+
- **THEN** 系统报错,提示基准分支不存在
39+
40+
### Requirement: 脏工作区拒绝
41+
当目标 worktree 存在未提交的改动(包括 staged 和 unstaged)时,系统 SHALL 拒绝执行同步,并提示用户先 commit 或 stash。
42+
43+
#### Scenario: 工作区有未提交改动
44+
- **WHEN** 用户调用 `/sync-worktree aifeat`,且 aifeat worktree 有未提交改动
45+
- **THEN** 系统拒绝同步,提示 "aifeat 工作区有未提交改动,请先 commit 或 stash 后重试"
46+
47+
#### Scenario: 工作区干净
48+
- **WHEN** 用户调用 `/sync-worktree aifeat`,且 aifeat worktree 工作区干净
49+
- **THEN** 系统正常执行同步流程
50+
51+
### Requirement: 批量同步
52+
用户 SHALL 能够通过 `--all` 参数一次性将所有 feature worktree rebase 到 master。
53+
54+
#### Scenario: 全部同步成功
55+
- **WHEN** 用户调用 `/sync-worktree --all`,且所有 feature worktree 工作区干净且无冲突
56+
- **THEN** 系统依次 rebase 每个 feature 分支到 master,并显示汇总结果
57+
58+
#### Scenario: 部分分支脏工作区
59+
- **WHEN** 用户调用 `/sync-worktree --all`,且部分 worktree 有未提交改动
60+
- **THEN** 系统跳过脏工作区的分支,同步其余分支,最终汇总中标注被跳过的分支及原因
61+
62+
#### Scenario: 部分分支冲突
63+
- **WHEN** 用户调用 `/sync-worktree --all`,且部分 worktree rebase 时产生冲突
64+
- **THEN** 系统对冲突分支执行 `git rebase --abort`,跳过该分支继续处理剩余分支,最终汇总中标注冲突分支
65+
66+
### Requirement: 单分支冲突处理
67+
当单分支模式下 rebase 产生冲突时,系统 SHALL 提供三个选项让用户选择。
68+
69+
#### Scenario: Rebase 冲突
70+
- **WHEN** 用户调用 `/sync-worktree aifeat`,且 rebase 过程中产生冲突
71+
- **THEN** 系统列出冲突文件,并提供三个选项:(1) Claude 协助解决冲突 (2) 用户手动解决后继续 (3) 中止 rebase(git rebase --abort)
72+
73+
### Requirement: 同步结果报告
74+
每次同步完成后,系统 SHALL 显示操作结果汇总。
75+
76+
#### Scenario: 单分支同步报告
77+
- **WHEN** 单分支 rebase 成功完成
78+
- **THEN** 系统显示:分支名、新 HEAD commit、同步的 commit 数量、是否需要 force push 到远程
79+
80+
#### Scenario: 批量同步汇总报告
81+
- **WHEN** 批量同步完成
82+
- **THEN** 系统显示汇总表格,列出每个分支的状态(✔ 成功 / ⚠ 跳过-脏工作区 / ❌ 跳过-冲突 / ℹ 已是最新)

0 commit comments

Comments
 (0)