sc-managing-worktrees
Git ワークツリーを作成・管理・スキャン・更新・削除でき、複数ブランチでの並行開発を保護ブランチのセーフガード付きでサポートします。複数ブランチの同時作業、実験的な機能の分離、保護ブランチ(main/develop)の更新、またはユーザーが「ワークツリー」「並行ブランチ」「機能の分離」「ブランチのクリーンアップ」「ワークツリーの状態」「main/develop の更新」に関する内容を指定した場合に使用できます。
description の原文を見る
Create, manage, scan, update, and clean up git worktrees for parallel development with protected branch safeguards. Use when working on multiple branches simultaneously, isolating experiments, updating protected branches (main/develop), or when user mentions "worktree", "parallel branches", "feature isolation", "branch cleanup", "worktree status", or "update main/develop".
SKILL.md 本文
Git ワークツリーの管理
このスキルを使用して、標準的な構造とトラッキング機能を備えたワークツリーを管理します。このスキルを呼び出すには /sc-git-worktree コマンドを使用します。
エージェント委譲
このスキルは Task ツール を経由して専門エージェントに処理を委譲します。
| 操作 | エージェント | 戻り値 |
|---|---|---|
| 作成 | sc-worktree-create | JSON: success、path、branch、tracking_row |
| スキャン | sc-worktree-scan | JSON: success、ワークツリーリスト、推奨事項 |
| クリーンアップ | sc-worktree-cleanup | JSON: success、branch_deleted、tracking_update |
| 中止 | sc-worktree-abort | JSON: success、worktree_removed、tracking_update |
| 更新 | sc-worktree-update | JSON: success、commits_pulled、conflicts(存在する場合) |
エージェントを呼び出すには、Task ツールを使用して以下のように指定します。
- プロンプトファイル:
.claude/agents/<agent-name>.md - 各エージェントの Inputs セクションで記載されているパラメータ
標準とパス
- リポジトリルート: 現在のディレクトリ。
- デフォルトワークツリーベース:
../synaptic-canvas-worktrees。 - ワークツリーは
<worktree_base>/<branch>に配置されます。 - トラッキングドキュメント(使用する場合):
<worktree_base>/worktree-tracking.mdは作成/スキャン/クリーンアップ/破棄時に更新する必要があります。トラッキングを使用しないリポジトリのため、トラッキングを無効化するトグルを用意してください。 - 命名規則: ワークツリーディレクトリ = ブランチ名。ブランチ命名はリポジトリポリシーに従います(例: master リリース、develop/DevBranch 統合、フィーチャーは統合から、ホットフィックスは master から、リリースブランチが必要に応じて)。
- ブランチ保護/フック: 保護ブランチへの直接コミットは禁止。ワークツリー全体でフック/ブランチ保護を尊重します。
- クリーンリネス: 作業が完了したか、ブランチがマージされたときにワークツリーを削除し、トラッキングを更新する必要があります。
保護ブランチ構成
保護ブランチ(main、develop、master など)は、誤削除を防ぐため特別な処理が必要です。
# 設定(通常はリポジトリの .claude/config またはエージェントに渡される)
git_flow:
enabled: true # boolean: git-flow ワークフローを使用するかどうか
main_branch: "main" # または "master" - 本番環境の主ブランチ
develop_branch: "develop" # git_flow.enabled = true の場合のみ
protected_branches:
- "main"
- "develop"
- "master"
# 追加パターンも可能: "release/*", "hotfix/*"
保護ブランチルール:
git_flow.enabled: falseの場合 →main_branchのみ保護git_flow.enabled: trueの場合 →main_branch+develop_branchを保護protected_branches配列に追加ブランチを追加可能- クリーンアップ/中止エージェントは保護ブランチを決して削除しません(ローカルまたはリモート)
- 保護ブランチはワークツリーから削除のみ可能。削除は決してできません
--updateを使用して、ワークツリーの保護ブランチの変更を安全にプルします
ワークフロー
スキャフォルディング(欠落している場合)
- ベースパス
<worktree_base>が存在することを確認。欠落している場合は作成します。 - トラッキングが有効な場合、ヘッダー付きのトラッキングドキュメントが存在することを確認します。
ワークツリーの作成(およびブランチ)
- 入力:
--branch <name>、--base <master|develop|...>、オプション--path。 - スキャフォルディング/トラッキングドキュメントが存在することを確認(有効な場合)。
git fetch --all --pruneを実行します。 - ベースブランチが存在し、最新版であることを確認。
- パスを決定: デフォルト
<worktree_base>/<branch>(またはオーバーライド)。 - ブランチ/ワークツリーを作成:
- ブランチがまだ存在しない場合:
git worktree add -b <branch> <path> <base>。 - ブランチが存在する場合:
git worktree add <path> <branch>。
- ブランチがまだ存在しない場合:
- 新しいワークツリーで、フックが適用されることを確認し、ステータスがクリーンであることを検証します。
- トラッキングが有効な場合、トラッキングドキュメントにエントリを追加/更新します(ブランチ、パス、ベース、目的、所有者、作成日、ステータス)。
- エージェントオプション:
sc-worktree-createエージェントに委譲。構造化 JSON(トラッキング行、ステータス)を返します。
ワークツリーのスキャン/検証
- ワークツリーをリスト:
git worktree list --porcelain。 - トラッキングドキュメントとクロスチェック(有効な場合)。欠落/古い項目または余分な行にフラグを立てます。
- 各ワークツリーについて、ステータスとマージ状態をチェック:
git -C <path> status --shortgit -C <path> fetchgit branch --remotes --contains <branch>でマージ状態を確認。
- 問題を特定: 未追跡の変更、分岐したブランチ、マージ済みだがクリーンアップされていないワークツリー、欠落したトラッキング項目。
- トラッキングドキュメントを現在の状態と問題で更新(有効な場合)。適切な場所でクリーンアップを提案します。
- エージェントオプション:
sc-worktree-scanエージェントに委譲。構造化 JSON を返します。
ワークツリーのクリーンアップ(マージ後または完了後)
- ブランチが保護されているか確認: ブランチが protected_branches リストに含まれている場合、ワークツリーのみを削除し、ブランチは決して削除しません。
git statusがクリーンでない場合、停止して明示的な承認/調整を要求します。- すべての作業がコミット/プッシュされているか、または破棄することを明示的に確認。
- ターゲットブランチがマージされているか、または削除に適切に承認されていることを確認。
- ワークツリーを削除:
git worktree remove <path>(--forceは承認がある場合のみ使用)。 - 非保護ブランチの場合: マージされており、ユニークなコミットがない場合、デフォルトでローカルに削除(
git branch -d <branch>)し、リモートに削除(git push origin --delete <branch>)。ユーザーが明示的にオプトアウトした場合のみスキップ。リモートブランチが既に存在しない場合、エラーなしで続行。マージされていない場合、明示的な承認でのみ削除。 - 保護ブランチの場合: ワークツリーのみを削除し、ブランチをローカルおよびリモートで保持します。トラッキングを更新して「ワークツリー削除、ブランチ保持(保護)」と記載。
- トラッキングが有効な場合、トラッキングドキュメントを削除/マージ SHA/日付でクリーン状態にマーク。
- エージェントオプション:
sc-worktree-cleanupエージェントに委譲。構造化 JSON を返します。
ワークツリーを中止(作業を破棄)
- ブランチが保護されているか確認: ブランチが protected_branches リストに含まれている場合、ワークツリーのみを削除し、ブランチは決して削除しません。
git statusがクリーンでない場合、停止して明示的な承認/調整を要求します。- ローカル変更を破棄し、オプションでブランチを削除することの承認を確認。
- ワークツリーを削除:
git worktree remove <path>(強制は承認がある場合のみ)。 - 非保護ブランチの場合: 指示された場合、ローカルにブランチを削除(
git branch -D <branch>)し、リモートに削除(git push origin --delete <branch>)。 - 保護ブランチの場合: ワークツリーのみを削除し、ブランチをローカルおよびリモートで保持します。確認を要求: 「ブランチは保護されています。ワークツリーを削除しますがブランチは保持しますか?」
- トラッキングが有効な場合、トラッキングドキュメントからエントリを削除し、中止を記載。
- エージェントオプション:
sc-worktree-abortエージェントに委譲。構造化 JSON を返します。
保護ブランチを更新(最新の変更をプル)
- ブランチが保護されていることを確認: protected_branches リスト内のブランチのみで動作します。ブランチが指定されていない場合、ワークツリーを持つすべての保護ブランチを更新します。
- 予期されたパスにワークツリーが存在するか確認。欠落している場合はエラー。
git statusがクリーンでない場合、停止して dirty 状態をレポート。- フェッチとプル:
git fetch origin <branch>その後git pull origin <branch>。 - マージコンフリクトが発生した場合:
- コンフリクトしたファイルを収集:
git diff --name-only --diff-filter=U - コンフリクト詳細を含むメインエージェントに制御を戻す
- メインエージェントがユーザーと協調してコンフリクトを解決
- 解決後、ユーザーがコミットして続行
- コンフリクトしたファイルを収集:
- クリーンなプルの場合: last_checked タイムスタンプとプルされたコミット数でトラッキングを更新。
- エージェントオプション:
sc-worktree-updateエージェントに委譲。成功またはコンフリクト詳細を含む構造化 JSON を返します。
安全と注意
- いかなる状況下でも保護ブランチを削除しません(main、develop、master)。
- 保護ブランチはワークツリーからのみ削除可能。ブランチ自体は常に保持される必要があります。
- 明示的な承認なしにブランチを削除したり、ワークツリーを強制削除しません。
- コミットされていない変更があるワークツリーのクリーンアップ/中止は、明示的に承認されない限り実行しません。
- 有効な場合、すべての操作でトラッキングドキュメントを同期させておきます。
- ブランチ保護とフックを尊重。保護ブランチへの直接コミットはありません。
- 長いスキャン/クリーンアップはバックグラウンドエージェントを使用。メインコンテキストを決定と要約に焦点を当てます。
- ワークツリーの保護ブランチを更新する場合、マージコンフリクトをメインエージェントに制御を戻して、ユーザー調整で処理します。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- randlee
- ライセンス
- MIT
- 最終更新
- 2026/5/10
Source: https://github.com/randlee/synaptic-canvas / ライセンス: MIT