smart-git-synclisted
Install: claude install-skill mjcreativelab/mjcreativelab-agent-prompts
# Smart Git Sync
[assets/git-sync.sh](assets/git-sync.sh) を読み込んで実行する。
zsh ではインライン実行しないこと(正規表現がグロブ展開されるため)。
一時ファイルに書き出して `bash` で実行するか、`bash /dev/stdin` 経由で渡す。
一時ファイルの明示削除は不要(OS の一時領域に任せる)。
## 出力の解釈と対応
スクリプトは構造化された出力を返す。以下の順序で解釈する:
### 早期終了ケース
1. **`UNCOMMITTED_CHANGES=true`** → ユーザーに未コミット変更の一覧を見せ、続行するか確認する。続行する場合は `SKIP_UNCOMMITTED_CHECK=1` を環境変数に設定してスクリプトを再実行する
2. **`PULL_FAILED=true`** → `PULL_ERROR` の内容を表示し、原因(コンフリクト等)と対処法を案内する。スクリプトの再実行はしない
### 正��完了ケース
3. **`DELETE_CANDIDATES=none`** → 「削除対象のマージ済みブランチはありません」と報告
4. **`DELETE_CANDIDATES`** にブランチ一覧がある場合 → 一覧を表示しユーザーに確認。`WORKTREE_CANDIDATES` に同じブランチ名の `merged|<branch>|<path>` エントリがあれば worktree パスを併記する。承認後、worktree が紐づくブランチは `git worktree remove <path>` → `git branch -d <branch>` の順で、紐づかないブランチは従来どおり `git branch -d <branch>` のみで削除する
5. **`GONE_CANDIDATES`** にブランチ一覧がある場合 → 「リモートで削除済み」として一覧を表示しユーザーに確認。`WORKTREE_CANDIDATES` に同じブランチ名の `gone|<branch>|<path>` エントリがあれば worktree パスを併記する。承認後、worktree が紐づくブランチは `git worktree remove <path>` → `git branch -D <branch>` の順で、紐づかないブランチは従来どおり `git branch -D <branch>` のみで削除する
6. **`SQUASH_CANDIDATES`** にブランチ一覧がある場合 → 「squash マージ済み(未マージ扱い)」として一覧を表示しユーザーに確認。`WORKTREE_CANDIDATES` に同じブランチ名の `squash|<branch>|<path>` エントリがあれば worktree パスを併記する。承認後、worktree が紐づくブランチは `git worktree remove <path>` → `git branch -D <branch>` の順で、紐づかないブランチは従来どおり `git branch -D <branch>` のみで削除する
7. 最後に `BRANCH`, `RECENT_COMMITS`, `REMAINING_BRANCHES` を使って結果を報告する
### 補助情報
- **`SWITCHING_FROM=<branch>`** → 元のブランチ名。報