Files
CraftKit/plugins/git/skills/branch/references/worktree-branch.md
T

65 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Worktree 分支规则
## 创建条件
满足任一条件时,优先在独立 worktree 创建新需求、缺陷或维护分支,不切换当前主工作区:
- 主工作区存在未提交文件、本地配置、环境配置或缓存;
- 用户要求不影响当前 checkout;
- 当前分支正被 IDE、服务或测试占用;
- 当前工作需要与主工作区并行进行。
Worktree 共享仓库对象和本地分支引用。同一个本地分支不能同时被两个 worktree 签出。
## 创建前检查
确认主仓库绝对路径、目标 worktree 绝对路径、分支名、基准引用和完整哈希。检查目标路径不存在、同名本地及远程引用的处理已经确认、目标分支未被其他 worktree 占用。分支名可能包含中文时始终加引号。
取得分支创建授权后执行唯一命令:
```text
git worktree add -b "<branch>" "<absolute-worktree-path>" "<base>"
```
创建后验证新 worktree 的分支、HEAD 和状态,并重新检查主工作区分支、HEAD 和未提交内容未变化。报告该分支的占用路径,提示主工作区不能同时签出,并记录任务完成后的清理义务。
## 关闭条件
创建分支的当次操作完成不等于 worktree 生命周期结束。只有分支开发任务、验证和用户要求的交付已经完成,并且用户不再要求保留现场时,才进入 `close`。
关闭前必须满足:
- worktree 没有未提交或未跟踪文件;
- 没有进行中的 merge、rebase、cherry-pick 或 revert;
- 当前 HEAD 已被预期本地分支引用;
- 主仓库、worktree 路径、分支和 HEAD 均已准确确认。
还要读取 `.craftkit/project.json` 的 `documents.workRoot`,检查该 Worktree 中与本分支任务对应的 `task.json` 和 ignored 文件。任务状态未到 `closed`、存在未登记的忽略文件或关闭清单尚未处理时,先执行 `knowledge:document-output close` 预览;用户要求保留现场时不得移除 Worktree。
展示检查结果、移除后保留的分支和唯一清理命令,取得用户确认后执行:
```text
git -C "<main-repository>" worktree remove "<absolute-worktree-path>"
```
不得直接删除目录,不得默认使用 `--force`,不得删除或重置分支,也不得批量清理其他 worktree。
## 关闭后验证
```text
Test-Path -LiteralPath "<absolute-worktree-path>"
git -C "<main-repository>" rev-parse --verify "<branch>"
git -C "<main-repository>" worktree list --porcelain
git -C "<main-repository>" status --short --branch
```
目录不存在、占用记录已释放、分支和提交仍存在、主工作区原有状态未变化时,关闭才算完成。
## 分支占用错误
```text
fatal: '<branch>' is already used by worktree at '<path>'
```
该错误表示分支仍由指定 worktree 签出。若任务仍在进行,继续在该 worktree 中操作;若任务已经结束,执行 `close`。不得强制 checkout、直接删除目录或删除分支绕过占用保护。