Skip to content

Commit 553d637

Browse files
committed
docs(sync-worktree): 更新技能文档以包含自动更新基准分支
- 在单分支、批量和合并模式中添加基准分支更新步骤 - 新增安全护栏说明:自动执行 `git pull --rebase` 确保同步到远程最新代码 - 更新版本号至 1.1 以反映功能增强
1 parent 5afa896 commit 553d637

1 file changed

Lines changed: 88 additions & 18 deletions

File tree

.claude/skills/sync-worktree/SKILL.md

Lines changed: 88 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: 在多个 git worktree 分支之间同步代码(rebase / merge)
44
license: MIT
55
metadata:
66
author: mudssky
7-
version: "1.0"
7+
version: "1.1"
88
---
99

1010
在多个 git worktree 分支之间通过 rebase 同步代码,或将 feature 分支 merge 回主分支。
@@ -140,16 +140,42 @@ git rev-parse --verify <base>
140140

141141
### 4.2 检查工作区状态
142142

143+
分别检查 **feature worktree****基准 worktree** 的工作区状态:
144+
143145
```bash
144146
git -C <worktree-path> status --porcelain
147+
git -C <base-worktree-path> status --porcelain
145148
```
146149

147-
如果输出**非空****拒绝**同步:
150+
如果 feature worktree 输出**非空****拒绝**同步:
148151
> `<branch>` 工作区有未提交改动,请先 commit 或 stash 后重试。
149152
153+
如果基准 worktree 输出**非空****拒绝**同步:
154+
> ❌ 基准分支 `<base>` 工作区有未提交改动,无法更新基准分支。请先 commit 或 stash 后重试。
155+
150156
**不得继续执行。** 不要提供自动 stash 的选项。
151157

152-
### 4.3 检查是否已是最新
158+
### 4.3 更新基准分支
159+
160+
在执行 rebase 之前,先从远程拉取基准分支的最新代码,确保同步到远程最新状态。
161+
162+
首先检查基准分支是否有远程跟踪分支:
163+
```bash
164+
git -C <base-worktree-path> rev-parse --abbrev-ref --symbolic-full-name @{upstream} 2>/dev/null
165+
```
166+
167+
如果有远程跟踪分支,执行 pull:
168+
```bash
169+
git -C <base-worktree-path> pull --rebase
170+
```
171+
172+
- **如果 pull 成功**:显示 `ℹ 已更新基准分支 <base> 到最新`,继续后续步骤。
173+
- **如果 pull 失败**(冲突或网络问题):显示错误信息,**中止同步**
174+
> ❌ 更新基准分支 `<base>` 失败,请手动处理后重试。
175+
176+
如果没有远程跟踪分支,跳过此步骤(使用本地基准分支继续)。
177+
178+
### 4.4 检查是否已是最新
153179

154180
检查基准分支是否有该分支没有的 commit:
155181
```bash
@@ -161,7 +187,7 @@ git rev-list --count <branch>..<base>
161187
162188
**到此结束。**
163189

164-
### 4.4 同步预览
190+
### 4.5 同步预览
165191

166192
展示将要应用的 commit:
167193
```bash
@@ -178,17 +204,17 @@ git log --oneline <branch>..<base>
178204
...
179205
```
180206

181-
### 4.5 执行 Rebase
207+
### 4.6 执行 Rebase
182208

183209
```bash
184210
git -C <worktree-path> rebase <base>
185211
```
186212

187213
**如果 rebase 成功** → 跳转 Step 5(成功报告)
188214

189-
**如果 rebase 失败(冲突)** → 跳转 Step 4.6(冲突处理)
215+
**如果 rebase 失败(冲突)** → 跳转 Step 4.7(冲突处理)
190216

191-
### 4.6 冲突处理(单分支模式)
217+
### 4.7 冲突处理(单分支模式)
192218

193219
当 rebase 产生冲突时:
194220

@@ -252,9 +278,31 @@ git -C <worktree-path> rev-parse --abbrev-ref --symbolic-full-name @{upstream} 2
252278
如果没有 feature worktree:
253279
> 当前没有可同步的 feature worktree。
254280
255-
### 6.2 逐个处理分支
281+
### 6.2 更新基准分支
282+
283+
在逐个处理 feature 分支之前,先更新基准分支(仅执行一次)。
256284

257-
对每个 feature worktree 执行单分支同步流程(Step 4.1–4.5),但有以下区别:
285+
1. 检查基准 worktree 工作区状态:
286+
```bash
287+
git -C <base-worktree-path> status --porcelain
288+
```
289+
如果有未提交改动,**中止整个批量同步**
290+
> ❌ 基准分支 `<base>` 工作区有未提交改动,无法更新。请先 commit 或 stash 后重试。
291+
292+
2. 检查是否有远程跟踪分支并拉取:
293+
```bash
294+
git -C <base-worktree-path> rev-parse --abbrev-ref --symbolic-full-name @{upstream} 2>/dev/null
295+
```
296+
如果有,执行:
297+
```bash
298+
git -C <base-worktree-path> pull --rebase
299+
```
300+
- 成功:显示 `ℹ 已更新基准分支 <base> 到最新`,继续。
301+
- 失败:**中止整个批量同步**,提示用户手动处理。
302+
303+
### 6.3 逐个处理分支
304+
305+
对每个 feature worktree 执行单分支同步流程(Step 4.1–4.6),但有以下区别:
258306

259307
- **脏工作区** → 记录为 `⚠ 跳过(脏工作区)`,继续处理下一个分支
260308
- **已是最新** → 记录为 `ℹ 已是最新`,继续处理下一个分支
@@ -263,7 +311,9 @@ git -C <worktree-path> rev-parse --abbrev-ref --symbolic-full-name @{upstream} 2
263311

264312
**不要因任何单个分支的失败而停止。** 始终处理所有分支。
265313

266-
### 6.3 汇总报告
314+
**注意**:批量模式下跳过 Step 4.3(更新基准分支),因为已在 Step 6.2 统一更新过。
315+
316+
### 6.4 汇总报告
267317

268318
所有分支处理完毕后,显示汇总表格:
269319

@@ -309,7 +359,26 @@ git -C <main-worktree-path> status --porcelain
309359
或:
310360
> ❌ 主分支 `<base>` 工作区有未提交改动,请先 commit 或 stash 后重试。
311361
312-
### 7.3 检查是否需要先同步
362+
### 7.3 更新基准分支
363+
364+
在合并之前,先从远程拉取基准分支的最新代码。
365+
366+
检查基准分支是否有远程跟踪分支:
367+
```bash
368+
git -C <main-worktree-path> rev-parse --abbrev-ref --symbolic-full-name @{upstream} 2>/dev/null
369+
```
370+
371+
如果有远程跟踪分支,执行:
372+
```bash
373+
git -C <main-worktree-path> pull --rebase
374+
```
375+
376+
- 成功:显示 `ℹ 已更新基准分支 <base> 到最新`,继续。
377+
- 失败:**中止合并**,提示用户手动处理。
378+
379+
如果没有远程跟踪分支,跳过此步骤。
380+
381+
### 7.4 检查是否需要先同步
313382

314383
检查 feature 分支是否落后于主分支:
315384
```bash
@@ -327,9 +396,9 @@ git rev-list --count <branch>..<base>
327396
| 直接合并 | 跳过同步,直接 merge(可能产生 merge commit) |
328397
| 取消 | 不执行任何操作 |
329398

330-
如果用户选择「先同步再合并」,先执行 Step 4 的完整流程,成功后继续 Step 7.4
399+
如果用户选择「先同步再合并」,先执行 Step 4 的完整流程,成功后继续 Step 7.5
331400

332-
### 7.4 合并预览
401+
### 7.5 合并预览
333402

334403
展示将要合并到主分支的 commit:
335404
```bash
@@ -346,7 +415,7 @@ git log --oneline <base>..<branch>
346415
...
347416
```
348417

349-
### 7.5 执行 Merge
418+
### 7.6 执行 Merge
350419

351420
**主 worktree** 目录中执行 merge:
352421
```bash
@@ -355,13 +424,13 @@ git -C <main-worktree-path> merge <branch>
355424

356425
如果 feature 分支已经 rebase 过,这通常是一个 **fast-forward merge**(不产生额外的 merge commit)。
357426

358-
**如果 merge 成功** → 跳转 Step 7.6(成功报告)
427+
**如果 merge 成功** → 跳转 Step 7.7(成功报告)
359428

360-
**如果 merge 失败(冲突)** → 类似 Step 4.6 的冲突处理流程,但操作目录改为主 worktree:
429+
**如果 merge 失败(冲突)** → 类似 Step 4.7 的冲突处理流程,但操作目录改为主 worktree:
361430
1. 列出冲突文件:`git -C <main-worktree-path> diff --name-only --diff-filter=U`
362431
2. 提供三个选项:Claude 协助解决 / 手动解决后 `git -C <path> merge --continue` / 中止 `git -C <path> merge --abort`
363432

364-
### 7.6 成功报告(Merge)
433+
### 7.7 成功报告(Merge)
365434

366435
```bash
367436
git -C <main-worktree-path> rev-parse --short HEAD
@@ -382,7 +451,8 @@ git -C <main-worktree-path> log --oneline -1
382451
## 安全护栏
383452

384453
- **禁止自动 stash**:工作区有未提交改动时,直接拒绝并告知用户先 commit 或 stash。
385-
- **禁止执行 `git push`**:本 skill 仅做本地 rebase。如需 force push,只提醒用户,不代为执行。
454+
- **自动更新基准分支**:在 rebase/merge 之前,自动对基准分支执行 `git pull --rebase`,确保同步到远程最新代码。仅当基准分支有远程跟踪分支且工作区 clean 时执行。pull 失败时中止操作。
455+
- **禁止执行 `git push`**:本 skill 仅做本地 rebase/merge。如需 force push,只提醒用户,不代为执行。
386456
- **禁止使用 `git rebase -i`**:交互式 rebase 需要终端输入,不受支持。
387457
- **批量模式冲突必须 abort**`--all` 模式下遇到冲突时,始终执行 `git rebase --abort` 并跳过。
388458
- **始终验证分支存在性**:在执行任何操作前,确认目标分支存在于 worktree 列表中。

0 commit comments

Comments
 (0)