AgentSkillsCN

git-worktree

利用 git worktree 进行并行开发的指南。涵盖 worktree 生命周期(创建→环境搭建→工作→同步→清理)、分支命名策略、rebase 工作流、频繁提交策略、冲突预防措施、环境设置以及故障排除等内容。适用于需要并行开发、多代理协作开发,或进行分支隔离的各类场景。

SKILL.md
--- frontmatter
name: git-worktree
description: git worktreeを活用した並列開発ガイド。worktreeライフサイクル(作成→環境構築→作業→同期→クリーンアップ)、ブランチ命名戦略、rebaseワークフロー、こまめなコミット戦略、コンフリクト予防策、環境セットアップ、トラブルシューティングをカバー。並列開発、マルチエージェント開発、ブランチ分離が必要な場面で使用。

git worktree 並列開発ガイド

概要

git worktree を活用した並列開発の技術ガイド。worktree の操作・運用に特化し、すべてのエージェントおよび開発者が参照できる独立したリファレンスとして機能する。

code
/project-orchestrator との役割分担:
  project-orchestrator → 並列開発ワークフロー全体のオーケストレーション
  /git-worktree (本スキル) → git worktree の操作・運用の技術ガイド

project-orchestrator から参照されるが、単独でも利用可能。

基本原則

code
1. 共有 .git ディレクトリ
   → すべての worktree は同一リポジトリの .git を共有する
   → コミット・ブランチ・リモート情報は全 worktree で共通

2. 独立した HEAD
   → 各 worktree は独自の HEAD を持ち、異なるブランチをチェックアウトできる
   → 作業ディレクトリ・インデックスも独立

3. 同一ブランチの二重チェックアウト禁止
   → 同じブランチを複数の worktree で同時にチェックアウトできない
   → 違反すると fatal: '{branch}' is already checked out at '{path}'

4. Hooks の共有
   → .git/hooks は共有されるため、pre-commit 等は全 worktree で動作する
   → worktree 固有の hook は設定できない

5. gitignore 対象ファイルは自動コピーされない
   → .claude/、node_modules/、.env 等は worktree 作成後に別途セットアップが必要

worktree ライフサイクル

全体フロー

code
1. 作成     → git worktree add でブランチと作業ディレクトリを作成
2. 環境構築 → 依存インストール、設定ファイルコピー、MCP 登録
3. 作業     → 実装、こまめなコミット、push
4. 同期     → rebase で親ブランチの最新を取り込み
5. PR 作成  → gh pr create で PR を作成
6. クリーンアップ → worktree 削除、ブランチ削除

Phase 1: 作成

bash
# 親ブランチから新しいタスクブランチ + worktree を作成
mkdir -p .worktrees
git worktree add .worktrees/{dir-name} -b {branch-name} {base-branch}

# 例: feature/auth から task/auth-login ブランチを作成
git worktree add .worktrees/task-auth-login -b task/auth-login feature/auth
bash
# 既存ブランチから worktree を作成(-b 不要)
git worktree add .worktrees/{dir-name} {existing-branch}

Phase 2: 環境構築

worktree 作成直後に必ずセットアップを実行する。

bash
cd .worktrees/{dir-name}

# 1. .claude/ ディレクトリをコピー(CLAUDE.md, rules/, settings 等)
if [ -d "../../.claude" ]; then
    cp -r "../../.claude" ".claude"
fi

# 2. 依存関係のインストール
pnpm install  # or npm install / go mod download / pip install -r requirements.txt

# 3. Serena MCP の登録(worktree パスに紐づけ)
claude mcp add serena -- uvx --from git+https://github.com/oraios/serena \
  serena-mcp-server --context ide-assistant --project $(pwd)

詳細なセットアップ手順は references/worktree-setup-checklist.md を参照。

Phase 3: 作業

bash
# 作業開始時の確認
pwd                        # worktree 内であること
git branch --show-current  # 正しいブランチであること

# 実装 → こまめにコミット(後述のコミット戦略を参照)
git add {files}
git commit -m "{type}: {概要}"

# 定期的に push
git push -u origin {branch-name}

Phase 4: 同期(rebase)

bash
git fetch origin
git rebase {base-branch}
# コンフリクト発生時は解消 → git add → git rebase --continue
git push --force-with-lease origin {branch-name}

詳細は references/rebase-workflow.md を参照。

Phase 5: PR 作成

作業完了後のフロー:

bash
# 1. 最終コミット + push
git add {files} && git commit -m "{type}: {概要}"
git push origin {branch-name}

# 2. rebase で親ブランチの最新を取り込み
git fetch origin
git rebase {base-branch}

# 3. テスト・lint が通ることを確認
pnpm test && pnpm lint  # プロジェクトに応じたコマンド

# 4. force-with-lease で push
git push --force-with-lease origin {branch-name}

# 5. PR 作成
gh pr create --base {base-branch} --title "{タイトル}" --body "{本文}"

gh が利用できない場合のフォールバック

以下の情報をユーザーに提示して手動 PR 作成をガイドする:

code
PR 作成 URL:
  https://github.com/{owner}/{repo}/compare/{base}...{head}

推奨内容:
  タイトル: {type}: {概要}
  本文: 変更の要約、テスト結果、関連 Issue

差分サマリーの取得:
  git diff --stat {base-branch}...HEAD
  git log --oneline {base-branch}..HEAD

Phase 6: クリーンアップ

bash
# worktree 削除
git worktree remove .worktrees/{dir-name}

# リモートブランチ削除(PR マージ後)
git branch -d {branch-name}
git push origin --delete {branch-name}

# 不整合メタデータの掃除
git worktree prune

ブランチ命名戦略

パターン: {prefix}/{description}

prefix用途
feature/機能開発(親ブランチ)feature/user-auth
task/個別タスク(worktree 用)task/auth-login-api
fix/バグ修正fix/token-refresh
hotfix/緊急修正hotfix/security-patch
refactor/リファクタリングrefactor/db-layer

worktree ディレクトリ命名

code
ブランチ名のスラッシュをハイフンに置換:
  task/auth-login → .worktrees/task-auth-login
  fix/token-refresh → .worktrees/fix-token-refresh

命名のベストプラクティス

code
Good:
  task/auth-login-api      → 何をするか明確
  task/user-profile-fe     → 領域(FE)が明確
  fix/jwt-expiry-handling  → 修正対象が明確

Bad:
  task/work1               → 内容が不明
  task/update              → 曖昧すぎる
  feature/big-feature      → 粒度が大きすぎる

コミット戦略

頻度と粒度

code
基本ルール:
  - 15〜30 分ごと、または意味のある変更単位ごとにコミット
  - テストが通る状態でコミットすることを優先
  - 完璧を待たず、動く状態でコミットする

コミットタイミングの判断:
  新しいファイルを作成した? → コミット
  関数/メソッドを1つ実装した? → コミット
  テストを追加して通った? → コミット
  設定ファイルを変更した? → コミット
  30分以上コミットしていない? → 現状をコミット(WIP 可)

Conventional Commits

code
{type}: {概要}

type:
  feat     → 新機能
  fix      → バグ修正
  refactor → リファクタリング
  test     → テスト追加・修正
  docs     → ドキュメント
  chore    → その他(設定変更、依存更新等)
  style    → フォーマット修正(動作に影響なし)

例:
  feat: ログインAPIエンドポイントを追加
  fix: トークンリフレッシュの期限判定を修正
  test: ユーザー認証のユニットテストを追加
  chore: ESLint設定を更新

WIP コミットの扱い

code
作業中に中間状態をコミットする場合:
  git commit -m "wip: ログイン画面のバリデーション実装中"

PR 前に整理する場合(インタラクティブ rebase):
  git rebase -i {base-branch}
  → WIP コミットを squash/fixup で統合

注意:
  - WIP コミットは push 前に整理することを推奨
  - ただし、並列開発では push 済みの WIP があっても問題ない
  - 最終的に PR マージ時に squash merge すれば履歴はクリーンになる

rebase ワークフロー概要

基本フロー

code
1. git fetch origin          → リモートの最新を取得
2. git rebase {base-branch}  → 親ブランチの上にコミットを載せ直す
3. コンフリクト解消(発生時) → 解消 → add → continue
4. git push --force-with-lease → 安全に force push

タイミング指針

code
必須:
  - PR 作成前(親ブランチの最新を取り込む)
  - レビュー指摘の修正後

推奨:
  - 半日〜1日ごとの定期同期
  - 親ブランチに大きな変更がマージされた直後

詳細な手順とコンフリクト解消方法は references/rebase-workflow.md を参照。

コンフリクト予防策概要

5 原則

code
1. タスク分割時にファイル競合を分析する
   → 同じファイルを複数タスクが変更しないようにタスクを設計する

2. 共通コードの変更は先行タスクとして切り出す
   → 設定ファイル、型定義、インターフェースは先に確定させる

3. ディレクトリで責任範囲を分離する
   → BE/FE、ドメイン別にディレクトリを分ける

4. 定期的に親ブランチを同期する
   → 半日〜1日ごとに rebase して差分を小さく保つ

5. ロックファイルの競合に備える
   → pnpm-lock.yaml, go.sum 等は再生成で解消するパターンを把握する

詳細は references/conflict-prevention.md を参照。

コマンドクイックリファレンス

操作コマンド
worktree 作成(新規ブランチ)git worktree add .worktrees/{dir} -b {branch} {base}
worktree 作成(既存ブランチ)git worktree add .worktrees/{dir} {branch}
worktree 一覧git worktree list
worktree 削除git worktree remove .worktrees/{dir}
worktree 強制削除git worktree remove --force .worktrees/{dir}
メタデータ掃除git worktree prune
現在のブランチ確認git branch --show-current
rebasegit fetch origin && git rebase {base}
rebase 中断git rebase --abort
安全な force pushgit push --force-with-lease origin {branch}
親ブランチとの差分git diff {base}...HEAD
コミットログgit log --oneline {base}..HEAD
PR 作成gh pr create --base {base} --title "{title}" --body "{body}"

レビューチェックリスト

worktree 作業開始時

code
[ ] pwd で worktree 内であることを確認
[ ] git branch --show-current で正しいブランチを確認
[ ] .claude/ ディレクトリが存在することを確認
[ ] 依存関係がインストール済みであることを確認

コミット前

code
[ ] テストが通ることを確認
[ ] lint/format が通ることを確認
[ ] 不要なファイル(デバッグ用コード等)が含まれていないことを確認
[ ] コミットメッセージが Conventional Commits に従っていることを確認

PR 作成前

code
[ ] rebase で親ブランチの最新を取り込み済み
[ ] すべてのテストが通る
[ ] lint/format エラーがない
[ ] 変更内容がタスクのスコープ内に収まっている
[ ] WIP コミットが整理されている(必要に応じて squash)

クリーンアップ時

code
[ ] worktree が削除されている
[ ] リモートブランチが削除されている(PR マージ後)
[ ] git worktree prune でメタデータが掃除されている

リファレンス