git-sync-cleanuplisted
Install: claude install-skill ijufumi/claude-skills
# ローカル最新化 & ブランチ掃除スキル
ローカルリポジトリを `origin` の最新に追従させ、リモート側で削除済みのローカルブランチを掃除するためのスキル。日々の作業開始時や、長期開発の合間にローカルが散らかってきたタイミングで使う。
## 前提条件
- カレントディレクトリが Git リポジトリであること
- `origin` という名前のリモートが存在し、認証済みで `git fetch` / `git pull` が可能なこと
- `origin` 上に `main` または `master` のいずれかのブランチが存在すること
> リモートは **`origin` 固定** で扱う。複数リモートを運用していても、このスキルは `origin` のみを対象に fetch / prune / pull する。他リモートの掃除をしたい場合はユーザーが個別に指示する想定。
---
## ワークフロー概要
```
[Step 1: 環境の確認]
→ [Step 2: 未コミット変更の検出(あれば中断)]
→ [Step 3: ベースブランチの検出と切り替え]
→ [Step 4: fetch --prune で全 ref prune → base を fast-forward 取り込み]
→ [Step 5: 削除候補(upstream が gone のブランチ)の検出]
→ [Step 6: 削除対象一覧の提示と一括承認]
→ [Step 7: 一括削除(未マージは保護してリスト報告)]
→ [Step 8: 結果サマリ]
```
**ユーザー承認が必須なのは Step 6 の 1 箇所のみ**。Step 2 で未コミット変更を検出した場合は承認ではなく「中断 → 状況報告 → ユーザーに対応を委ねる」で扱う。
ユーザーが最初のリクエストで「全部 OK」「掃除も含めて全部やって」など事前承認を明言している場合は、Step 6 の確認を 1 行の復唱に省略してよい(例: `gone ブランチ 5 件を削除します`)。
---
## Step 1: 環境の確認
最初にツールが揃っているかを軽く確認する。
```bash
# Git リポジトリか
git rev-parse --is-inside-work-tree
# origin が存在するか
git remote get-url origin
```
どちらかが失敗した場合は、その内容をユーザーに報告して中断する。Git リポジトリでない場合は「ここは Git リポジトリではないようです」と素直に伝える(`git init` は勝手にしない)。`origin` が無い場合は「`origin` リモートが見つかりません。リモートを追加してから再実行してください」と案内する。
ユーザーへの最初のテキスト出力で、これから行うことを 1 行で予告すること(例: `origin から最新化して、不要なローカルブランチを掃除します`)。
## Step 2: 未コミット変更の検出(あれば中断)
ベースブランチに切り替える前に、ワークツリーがクリーンであることを確認する。`git switch` は変更が衝突しない場合は通すが、`git pull` も含めて予期せぬ事故を避けるため、**未コミット変更がある時点で中断する**。勝手に `stash` / `commit` / `restore` はしない。
```bash
# 変更の有無