git-worktreelisted
Install: claude install-skill BackToCimaCoppi/Praxis
# git-worktree
多 worktree 并行开发管理工具。主仓库当前 checkout 的分支即**主干分支**,是唯一主干,所有 worktree 的改动最终合并回主干。worktree 与任何总控/任务体系**解绑**——同一 worktree 可承载多个任务,若项目启用了 `control` skill,通过 `/control switch` 切换。
## 约定探测(所有操作的公共前置)
```bash
# 主仓库路径 = git worktree list 的第一行(git 保证主仓库永远排第一)
MAIN_ROOT=$(git worktree list | head -1 | awk '{print $1}')
# 主干分支 = 主仓库当前 checkout 的分支
TRUNK_BRANCH=$(git -C "$MAIN_ROOT" branch --show-current)
# worktree 目录命名前缀 = 主仓库目录名
REPO_NAME=$(basename "$MAIN_ROOT")
PARENT_DIR=$(dirname "$MAIN_ROOT")
# 布局探测:主仓库目录名 == 主干分支名(容器目录布局,如 ~/projects/myrepo/main)→ worktree 不带前缀
if [ "$REPO_NAME" = "$TRUNK_BRANCH" ]; then
WT_PREFIX="" # 容器布局:worktree 目录 = PARENT_DIR/{名称}
else
WT_PREFIX="$REPO_NAME-" # 传统布局:worktree 目录 = PARENT_DIR/{REPO_NAME}-{名��}
fi
```
> 若 `TRUNK_BRANCH` 探测为空(主仓库处于 detached HEAD),停下询问用户主干分支名,不猜测。
## 合并原则(所有涉及合并的操作均遵守)
1. 先提交**源分支**的未提交改动
2. 再提交**目标分支**的未提交改动
3. 执行 merge
4. 遇到冲突直接解决,不 stash、不建中间分支
---
## 触发入口(强制)
skill 被调用后,**第一步必须**用 `AskUserQuestion` 询问用户选择操作:
问题:**你想执行哪个 worktree 操作?**
选项:
- **新建 worktree**:从主干拉出新分支,在兄弟目录创建 worktree
- **合并到主干**:把当前 worktree commit 并 merge 到主干(完工时用)
- **主干同步到所有 worktree**:把主干 merge 进每个 feature worktree(重大改动时用)
- **清理当前 worktree**:验证已全部合并到主干后删除 worktree 和分支
根据用户选择跳到对应 §。
---
## §A. 新建 worktree
**输入**:向用户询问英文任务名(如 `coupon-center`、`order-export`)
**命名规则**:
- 目录名:`{WT_PREFIX}{名称}`(传统布局为 `{REPO_NAME}-{名称}`,容器布局直接 `{名称}`,探测逻辑见「约定探测」)
- 路径:主仓库的**兄弟目录**(`PARENT_DIR/{WT_PREFIX}{名称}`)
- 分支:`feature/{名