mcpField
S
sc-push

sc-push

github.com/tony363開発2069 回インストール30 週間前に更新
リポジトリ

sc-push について

sc-pushは、Gitの変更を複数のリモートに送るスキルです。リモートごとのパス除外、ブランチ選択、ドライラン、強制プッシュの確認に対応します。

主な機能

  1. 01指定または全リモートへのプッシュ
  2. 02リモートごとのパス除外
  3. 03プッシュするブランチの選択
  4. 04ドライランで計画を確認
  5. 05強制プッシュ前の確認

活用シーン

  1. 01複数リモートへのブランチ公開
  2. 02特定リモートへの指定パスの除外
  3. 03パスを除外したプッシュの事前確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tony363/superclaude --skill sc-push

インストール後、Claude Code で/sc-pushを入力して読み込まれたか確認します。

詳細

マルチリモートプッシュスキル

リモートごとの設定を使用して、複数の git リモートに変更をプッシュします。コンテンツの選択的なフィルタリング(リモートごとのパス除外)、ブランチのマッピング、強制プッシュの制御に対応しています。

クイックスタート

# Push current branch to all remotes
/sc:push

# Push specific branch
/sc:push main

# Push with path exclusions for a remote
/sc:push --exclude efs:prompts/,secrets/

# Push to specific remotes only
/sc:push --remotes origin,staging

# Dry run to preview actions
/sc:push --dry-run

動作フロー

  1. 解析 - ブランチ、リモートの一覧、除外対象、フラグを抽出します
  2. 検証 - git の状態、未コミットの変更、リモートの存在を確認します
  3. 計画 - 除外対象を含む、リモートごとのプッシュ計画を作成します
  4. 確認 - 計画を表示し、強制プッシュについてユーザーの確認を得ます
  5. 実行 - 各リモートに順番にプッシュします
  6. 報告 - リモートごとのプッシュ結果を要約します

フラグ

フラグ型デフォルト説明
--remotesstringallプッシュ先のリモートをカンマ区切りで指定します
--excludestring-リモートごとの除外対象:remote:path1,path2
--dry-runboolfalse実行せずにプッシュ計画をプレビューします
--forceboolfalse除外対象があるリモートに強制プッシュします
--no-verifyboolfalseプッシュ前フックをスキップします

フェーズ 1:引数の解析

  • ブランチ:最初の位置引数、または git rev-parse --abbrev-ref HEAD で取得した現在のブランチ
  • リモート:--remotes フラグで指定するか、git remote で設定済みのすべてのリモートを取得します
  • 除外対象:--exclude remote:path1,path2;remote2:path3 形式を解析します

フェーズ 2:Git の状態を検証

# Verify git repository
git rev-parse --is-inside-work-tree

# Get current branch
git branch --show-current

# Check for uncommitted changes
git status --porcelain

未コミットの変更がある場合:

  • ユーザーに警告します
  • 先にコミットするか、既存のコミットのみをプッシュするか尋ねます

対象の各リモートが存在することを検証します:

git remote -v

フェーズ 3:プッシュ計画の作成

各リモートについて、プッシュ方法を決定します。

通常のプッシュ(除外対象なし)
git push <remote> <branch>
フィルタリングしたプッシュ(除外対象あり)

特定のリモートでパスを除外する必要がある場合:

  1. 未コミットの変更がある場合は退避します
  2. 一時ブランチを作成します:git checkout -b tmp-push-<remote>-$$ <branch>
  3. 除外対象のパスをインデックスから削除します:git rm -rf --cached <paths>(パスが存在しない場合のエラーは無視します)
  4. 削除をコミットします:git commit -m "tmp: remove excluded paths for <remote> push" --allow-empty
  5. 一時ブランチを強制プッシュします:git push <remote> tmp-push-<remote>-$$:<branch> --force
  6. 元のブランチに戻ります:git checkout <branch>
  7. 一時ブランチを削除します:git branch -D tmp-push-<remote>-$$
  8. 該当する場合は、退避した変更を復元します

実行前に計画を提示します:

Push Plan:
  Branch: <branch>

  Remote: origin
    Strategy: direct push
    Command: git push origin <branch>

  Remote: efs
    Strategy: filtered push (excluding: prompts/, secrets/)
    Steps: temp branch -> remove paths -> force push -> cleanup

フェーズ 4:確認

強制プッシュが必要なリモートがある場合:

  • 実行前に必ずユーザーに確認します
  • 強制プッシュされる内容とその理由を正確に示します
  • ユーザーの明示的な確認なしに main/master へ強制プッシュすることはありません

フェーズ 5:プッシュの実行

リモートごとに、プッシュ計画を順番に実行します。

  1. 順番に各リモートへプッシュします
  2. 各リモートの成功または失敗を報告します
  3. 失敗した場合:エラーを記録し、残りのリモートへの処理を続行します
  4. 一時ブランチをすべてクリーンアップします

フェーズ 6:結果の報告

## Push Summary

| Remote | URL | Strategy | Status |
|--------|-----|----------|--------|
| origin | github.com/user/repo | direct | Success |
| efs | github.com/org/repo | filtered | Success |

**Branch**: <branch>
**Excluded paths**: efs: prompts/, secrets/

エラー処理

状況対応
git リポジトリではないエラーで終了します
リモートが見つからない利用可能なリモートとともにエラーを表示します
未コミットの変更がある警告し、コミットするか続行するか尋ねます
プッシュが拒否された(non-fast-forward)先にプルするよう提案し、自動で強制プッシュすることはありません
main/master への強制プッシュ明示的な確認を必須とします
一時ブランチのクリーンアップに失敗ユーザーに警告し、クリーンアップ用コマンドを提示します
ネットワーク障害成功または失敗したリモートを報告します

安全策

  • ユーザーの明示的な同意なしに main/master へ強制プッシュしません
  • 実行前に必ずプッシュ計画を表示します
  • 失敗した場合も一時ブランチをクリーンアップします
  • 失敗した場合も退避した変更を復元します
  • 初回使用時、フィルタリングしたプッシュはデフォルトでドライランにします
  • 一時コミットがソースブランチの履歴に現れることはありません

ツール連携

  • Bash - すべての git 操作
  • Read - リモート設定を確認するために .git/config を調査します

コメント