mcpField
G
git-ops

git-ops

github.com/0xdarkmatter開発7841 回インストール2 週間前に更新
リポジトリ

git-ops について

git-opsは、コーディングエージェントのワークフロー向けGit操作オーケストレーションスキルです。読み取り専用の問い合わせはその場で実行し、書き込みは安全レベルに応じてバックグラウンドエージェントに委任します。worktreeやブランチの取り込み、ローカルリリースにも対応します。

主な機能

  1. 01読み取り専用のGit問い合わせを直接実行
  2. 02安全レベル別の書き込み委任
  3. 03worktreeの状態と差分の調査
  4. 04ブランチ取り込みと整理の計画
  5. 05ローカルリリース手順の支援

活用シーン

  1. 01状態・ログ・差分をすばやく確認
  2. 02コミット、プッシュ、PR操作を委任
  3. 03複数のworktreeを調査・整理
  4. 04コミットを分析してローカルタグを作成

インストール

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

$npx skills add https://github.com/0xdarkmatter/claude-mods --skill git-ops

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
.gitkeep
references/
advanced-git.md
dispatch.md
extended-operations.md
land-all.md
lane-provisioning.md
rebase-patterns.md
stash-patterns.md
scripts/
.gitkeep
land-all.sh
new-lane.sh
status.sh
worktree-survey.sh
tests/
run.sh

詳細

翻訳後に原文が更新されています。最新の内容は原文をご確認ください。

Git Ops

インテリジェントな Git 操作オーケストレーターです。読み取り専用のクエリは速度を優先してインラインで処理し、書き込み操作はバックグラウンドの Sonnet エージェント(git-agent)にディスパッチして、メインセッションを解放します。

アーキテクチャ

User intent (commit, PR, rebase, status, etc.)
    |
    +---> Tier 1: Read-only (status, log, diff, blame)
    |       |
    |       +---> Execute INLINE via Bash (fast, no subagent)
    |
    +---> Tier 2: Safe writes (commit, push, tag, PR, stash)
    |       |
    |       +---> Gather context from conversation
    |       +---> Dispatch to git-agent (background, Sonnet)
    |       |       +---> Fallback: general-purpose with inlined protocol
    |       +---> Agent executes and reports back
    |
    +---> Tier 3: Destructive (rebase, reset, force-push, branch -D)
            |
            +---> Dispatch to git-agent (background, Sonnet)
            |       +---> Fallback: general-purpose with inlined protocol
            +---> Agent produces PREFLIGHT REPORT (does NOT execute)
            +---> Orchestrator relays preflight to user
            +---> On confirmation: re-dispatch with execute authority

安全性の階層

Tier 1:読み取り専用 — インラインで実行

サブエージェントは不要です。即座に結果を得るため、Bash から直接実行します。

操作コマンド
ステータス(詳細)bash $HOME/.claude/skills/git-ops/scripts/status.sh — HEAD、同期状態、ツリー、ワークツリー、ブランチ、PR を一括で表示
ワークツリーの調査bash $HOME/.claude/skills/git-ops/scripts/worktree-survey.sh — ワークツリーごとの状態、ずれの検出、削除可能な項目/WIP/ゴースト/孤立項目のトリアージ
一括ランディング計画bash $HOME/.claude/skills/git-ops/scripts/land-all.sh [--porcelain] — 一括ランディングに向けて、各ブランチを LANDABLE/STALE/WIP/ACTIVE/MERGED に分類します(下記「すべてランディングする」を参照)
ステータス(簡易)git status --short
ログgit log --oneline -20
差分(未ステージ)git diff --stat
差分(ステージ済み)git diff --cached --stat
差分(全体)git diff [file] または git diff --cached [file]
ブランチ一覧git branch -v
リモートブランチgit branch -rv
スタッシュ一覧git stash list
責任者の表示git blame [file]
コミットの表示git show [hash] --stat
Refloggit reflog --oneline -20
タグgit tag --list --sort=-v:refname
ワークツリー一覧git worktree list
PR 一覧gh pr list
PR ステータスgh pr view [N]
Issue 一覧gh issue list
CI チェックgh pr checks [N]
実行ステータスgh run list --limit 5

T1 操作では、結果を見やすく整えて直接提示します。利用可能な場合は、差分に delta を使用します。

同梱スクリプトを使用する場面:

  • ユーザーが「status」「今どうなっている?」「コミットするものはある?」「プッシュするものはある?」と尋ねた場合 → status.sh
  • ユーザーがワークツリー、削除可能なブランチ、ずれ、「何をクリーンアップできる?」について尋ねた場合 → worktree-survey.sh
  • どちらのスクリプトも、問題がなければ 0、要対応なら 1、Git リポジトリでなければ 2 を終了コードとして返します。組み合わせて使用できます。

クリーン度チェック(予防的 — T1 のステータス確認のたびに実行)

ステータスを確認するときは、以下のアンチパターンをスキャンし、ステータス出力より先に提示します。ユーザーが気づくまで待たないでください。status.sh スクリプトがチェック 1 と 2 を自動で処理し、チェック 3 と 4 は Claude が担当します。

アンチパターン 1:メインのチェックアウトがフィーチャーブランチにある 🔴

検出条件: メインのチェックアウト(ワークツリーではない)にいて、git branch --show-current ≠ リポジトリのデフォルトブランチ(main/master/trunk)。

問題点: メインのチェックアウトはフォールバック用の作業領域です。ここにフィーチャーブランチがあると、ステータスを正しく確認できなくなり、ワークツリー操作が混乱し、「現在」の状態が不明確になります。フィーチャー作業には専用のワークツリーを使用します。

警告を出す: ステータス出力より前に、目立つ警告を表示します。

修正方法:

git checkout main                                              # return main to trunk
git worktree add .claude/worktrees/<name> <feature-branch>   # move work to worktree

メインのチェックアウトとワークツリーの判別:

GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
# ".git"               → main checkout  → check applies
# contains "worktrees" → inside a worktree → skip this check
アンチパターン 2:マージ済みの古いブランチ 🟡

検出条件: git branch --merged <default> がトランク以外のブランチを返す。

問題点: マージ済みなのに削除されていないブランチは、本当に進行中の作業を見えにくくするノイズです。

報告する: 件数を報告します。fleet sweep(fleet-ops)を提案します。--apply を使うと、開いているセッションが保持していない、ワークツリーのないマージ済みブランチを、損失なく、確認テキストの入力後に削除できます。

アンチパターン 3:プッシュ済みブランチ上の WIP コミット 🟡

検出条件: git log --oneline @{u}..HEAD に、wip|WIP|todo|TODO|fixme|FIXME|temp|TEMP|hack|HACK に一致する件名が含まれる。

問題点: プッシュ済みの履歴に WIP マーカーがあると、未完成の作業がローカルマシンの外に出てしまったことを示します。履歴が分かりにくくなり、クリーンな PR の妨げになります。

報告する: 該当するコミットを列挙し、対話的なリベースでスカッシュするか、名前を変更するよう提案します。

アンチパターン 4:未コミットの変更が大量にある 🟡

兆候: ステージ済み+未ステージ+未追跡のファイルが 20 個を超えています。

問題点: 未コミットの差分が大きいとレビューが難しく、失われやすくなります。また、「作業しながらコミットする」習慣が崩れていることを示しています。

指摘方法: 合計数を伝え、論理的な単位ごとに少しずつコミットすることを提案します。


ティア 2:安全な書き込み — エージェントに委任

関連するコンテキストを収集してから、git-agent に委任します(バックグラウンド、Sonnet)。

委任前に収集するコンテキスト:

操作収集するコンテキスト
コミットユーザーが取り組んでいる内容(会話から)、ステージ済みのファイル、最近のコミットのスタイル
プッシュ現在のブランチ、トラッキング情報、リモートより先行しているコミット
PR の作成ブランチ上のすべてのコミットと main の比較、説明文作成のための会話コンテキスト
タグ/リリース最後のタグ以降のコミット、現在使用中のバージョンパターン
スタッシュ現在の変更、ユーザーが指定したスタッシュメッセージ
チェリーピック対象コミットの詳細、現在のブランチ
ブランチの作成ベースブランチ、最近のブランチで使用されている命名規則
gh issue の作成ユーザーの説明、言及されている場合はラベル

委任テンプレート:

You are the git-agent handling a Tier 2 (safe write) operation.

## Domain Knowledge
For release or PR operations, read CI context first:
- Read: skills/ci-cd-ops/SKILL.md (release workflows, PR conventions)

## Context
- Current branch: {branch}
- Repository: {repo info}
- User intent: {what the user asked for}
- Conversation context: {relevant summary of what was being worked on}

## Operation
{specific operation details}

## Project Conventions
{commit style, branch naming, PR template if detected}

Execute the operation following your T2 protocol (verify state, execute, confirm, report).
ティア 3:破壊的操作 — 事前確認が必須

git-agent に、事前確認レポートのみを作成するよう明示して委任します。

委任テンプレート(事前確認):

You are the git-agent handling a Tier 3 (destructive) operation.

## Context
- Current branch: {branch}
- Repository: {repo info}
- User intent: {what the user asked for}

## Operation
{specific operation details}

IMPORTANT: Do NOT execute this operation. Produce a T3 Preflight Report only.
Show exactly what will happen, what the risks are, and how to recover.

ユーザーの確認後: 実行権限を付与して再度委任します。

User has confirmed the Tier 3 operation after reviewing the preflight.

## Approved Operation
{exact operation from preflight}

## Confirmation
Proceed with execution. Follow T3 execution protocol:
1. Create a safety bookmark: note the current HEAD hash
2. Execute the operation
3. Verify the result
4. Report with the safety bookmark for recovery

委任の仕組み

T2/T3 ではバックグラウンドがデフォルトです。ユーザーが結果を待っている場合はフォアグラウンドを使用し、ワークツリーの分離は依頼された場合に限ります。呼び出し形式については、references/dispatch.md を参照してください。

フォールバック:git-agent が利用できない場合

git-agent が利用できない場合は、ティアのプロトコルをプロンプトに含めて general-purpose に委任します。インライン実行は、単純な T2 操作に限る最終手段です。テンプレートについては、references/dispatch.md を参照してください。

拡張操作

リリースのワークフロー

git-ops が担当するのは、リリースのローカル側のみです。コミットの分析、CHANGELOG の内容の生成、ローカルタグの作成が含まれます。リモート側(プッシュ、gh release create、リポジトリのメタデータ)は github-ops スキルが担当します。

ユーザーから「リリースを作成」「バージョンを上げる」「リリースにタグを付ける」と依頼された場合:

  1. インライン(T1): 現在のバージョンと最後のタグ以降のコミットを確認します。

    git describe --tags --abbrev=0 2>/dev/null
    git log --oneline $(git describe --tags --abbrev=0 2>/dev/null)..HEAD
    
  2. バージョンの更新内容を決定します:

    • feat: コミット → マイナーバージョンを上げる
    • fix: コミット → パッチバージョンを上げる
    • BREAKING CHANGE: または !: → ユーザーの明示的な承認が必要です(メジャーバージョンを自動で上げることはありません)。
    • または、ユーザーが指定したバージョンを使用します。
  3. git-agent に委任(T2): CHANGELOG の内容を生成し、ローカルタグを作成します。

  4. リモート側の処理を github-ops に引き継ぎます: コミットとタグをプッシュし、リリースノートを添えて GitHub リリースを作成し、必要に応じてリポジトリのメタデータを更新します。git-ops から gh release create を呼び出してはいけません。これはローカルとリモートの境界を越える操作です。skills/github-ops/SKILL.md の update モードを参照してください。

その他の拡張操作

CHANGELOG の生成、PR の全サイクル、ブランチの整理(ブランチの削除は T3 の事前確認が必要)、semver の分析、コンフリクト解決の支援については、references/extended-operations.md を参照してください。

ワークツリーの操作

このスキルでは、ワークツリーを第一級の要素として扱います。分類は次のとおりです。

操作ティア方法
調査T1bash scripts/worktree-survey.sh — 読み取り専用。ワークツリーごとの状態と差分を報告します
新しいレーンT2(インライン)bash scripts/new-lane.sh [--sibling] <slug> [base] — 高速なスクリプトによるプロビジョニング:ブランチ lane/<slug> を リポジトリ内 の .claude/worktrees/<slug> に作成(gitignore 対象。外部の <repo>-<slug> に作成する場合は --sibling を指定)し、gitignore 対象の環境ファイルを引き継ぎます。衝突を解消するワンコマンドの方法です。下記「レーンのプロビジョニング」を参照してください
作成(個別対応)T2エージェント経由で git worktree add <path> -b <branch> を実行 — スクリプトでは対応していない標準外のレイアウト向けです
取り込みT2ワークツリーのブランチをトランクにリベース + テスト + ファストフォワードします。複数ステップの手順です。下記「ワークツリーの取り込み手順」を参照してください
刈り込み(クリーンアップ)T2ゴーストエントリ(登録済みだが FS 上に存在しないもの)には git worktree prune を使います。常に安全で、データが失われることはありません
削除T3git worktree remove <path> — ファイルシステムの状態を破棄します。ワークツリーごとの事前確認と明示的な承認が必要です
レーンのプロビジョニング(衝突を解消する方法)

bash scripts/new-lane.sh [--sibling] <slug> [base]:ブランチ lane/<slug> を .claude/worktrees/<slug> に作成し、gitignore を確実に適用して環境ファイルを引き継ぎます。既存の内容を上書きすることはありません。コミット済みのレーン作業はワークツリーを削除しても残ります。早めに取り込みましょう。詳細:references/lane-provisioning.md。

調査を最初に行う原則

scripts/worktree-survey.sh を先に実行して出力をユーザーに提示せずに、刈り込みや削除を提案してはいけません。 調査では各ワークツリーを次のように分類します。

  • (trunk) — メインリポジトリそのもの。刈り込み禁止
  • PRUNABLE — トランクにマージ済みで、未コミットの作業も未プッシュのコミットもない → 安全に削除できます
  • has WIP — 未コミットの変更あり → 先にコミットするかスタッシュしてください。自動削除は禁止です
  • unpushed — アップストリームより先行するコミットあり → 削除前にプッシュするか、チェリーピックしてください
  • in-flight — 未マージだが変更はない → 引き続き使用中の可能性が高い状態です
  • GHOST — 登録済みだがファイルシステム上に存在しない → git worktree prune で解消できます
  • UNREGISTERED / orphan — git のエントリがないファイルシステム上のディレクトリ → 明示的なレビューなしに触れてはいけません

並列レーンのウェーブ後は、代わりに fleet sweep(fleet-ops)を実行してください。この調査では見えない情報も確認できます。内容ベースで取り込まれたレーン、競合するレーン、開いているセッションがまだ使用している孤立ディレクトリ、アーカイブについて確認すべき終了済みセッションなどです。

ワークツリーの取り込み手順(T2)

ワークツリーのブランチをトランクに取り込む場合(リベース + テスト + ff):

  1. 前提条件を確認します:ワークツリーがクリーンであること、ブランチがトランクより先行していること、すでにマージ済みでないこと
  2. トランクをフェッチし、ワークツリーのブランチをトランクにリベースします
  3. プロジェクトのテストコマンドを実行します(package.json / pyproject.toml / justfile から特定)
  4. テストに合格したら、リベース後の先端にトランクをファストフォワードします
  5. プッシュしてはいけません — これは別途明示的に行う手順です(push-preflight を通す必要があります)

ワークツリーのパスとトランク名を指定し、T2 操作として git-agent に割り当てます。

すべて取り込む — 保留中の各レーンを一括取り込み(T1 で計画 → fleet-ops で実行)

scripts/land-all.sh --porcelain で調査し、何かを取り込む前に、取り込み/保留/刈り込みの計画を必ずユーザーに確認してください(絶対ルール)。fleet-ops で取り込み、すべての CONFLICT は解決せずにエスカレーションし、その後、調査を先に行ってからクリーンアップします。手順全文:references/land-all.md。

安全性の不変条件: ACTIVE レーン(稼働中のピア書き込み)は決して取り込みません。これは、取り込み時に適用する worktree-boundaries の稼働中ライター保護です。WIP は、明示的に先にコミットする必要があります。STALE は、明示的なオプトイン(--recent-days またはブランチ名の指定)が必要です。デフォルトで取り込むのは LANDABLE のみです。

境界(厳守ルール)

rules/worktree-boundaries.md を参照してください。概要:

  • 決して rm -rf .claude/worktrees/ を実行しないでください。調査で表示される孤立数は参考情報であり、クリーンアップのきっかけではありません
  • .claude/worktrees/ に未追跡のエントリがある場合、決して git add -A を実行しないでください(gitlink がコミットに取り込まれます)
  • 別のセッションのワークツリーを「孤立している」と決して判断しないでください。まず確認してください
  • プロジェクトをまたぐ作業はプロジェクトをまたいだままにしてください。リポジトリ Y を操作しているときに、リポジトリ X のワークツリーがこちらの関与対象になることはありません

判断ロジック

Git 関連の依頼を受けたら、次のフローに従ってください。

1. Classify the operation tier (T1/T2/T3)

2. If T1:
   - Execute inline via Bash
   - Format and present results
   - DONE

3. If T2:
   - Gather context (conversation, git state, conventions)
   - Decide foreground vs background:
     * User waiting on result? -> foreground
     * User continuing other work? -> background
   - Dispatch to git-agent with context
   - Relay result when received

4. If T3:
   - Gather context
   - Dispatch to git-agent for PREFLIGHT ONLY
   - Present preflight report to user
   - Wait for explicit confirmation
   - Re-dispatch with execute authority
   - Relay result

クイックリファレンス

タスクティアインライン/エージェント
ステータスの確認(詳細)T1インライン(scripts/status.sh)
ワークツリーの調査T1インライン(scripts/worktree-survey.sh)
差分の表示T1インライン
ログの表示T1インライン
PR の一覧表示T1インライン
コミットT2エージェント
プッシュT2エージェント
PR の作成T2エージェント
タグの作成T2エージェント
リリースの作成T2エージェント
スタッシュのプッシュ/ポップT2エージェント
チェリーピックT2エージェント
ブランチの作成T2エージェント
ワークツリーの作成T2エージェント
ワークツリーの取り込みT2エージェント(リベース+テスト+早送り)
ゴーストワークツリーの整理T2エージェント(git worktree prune)
リベースT3エージェント(事前確認)
強制プッシュT3エージェント(事前確認)
Reset --hardT3エージェント(事前確認)
ブランチの削除T3エージェント(事前確認)
変更の破棄T3エージェント(事前確認)
main へのマージT3エージェント(事前確認)
ワークツリーの削除T3エージェント(ワークツリーごとに事前確認)

ツール

ツール用途
gitすべての Git 操作
ghGitHub CLI — PR、イシュー、リリース、アクション
delta構文強調表示付き差分(利用可能な場合)
lazygit対話型 TUI(ユーザーに提案し、エージェントは使用しない)

追加リソース

詳しいパターンについては、以下を読み込んでください。

  • ./references/rebase-patterns.md - 対話型リベースのワークフローと安全対策
  • ./references/stash-patterns.md - スタッシュ操作とワークフロー
  • ./references/advanced-git.md - Bisect、チェリーピック、ワークツリー、reflog、競合
  • ./references/dispatch.md - エージェント呼び出しの形式(バックグラウンド、フォアグラウンド、ワークツリー分離)と git-agent が利用できない場合のフォールバック
  • ./references/extended-operations.md - 変更履歴、PR の全サイクル、ブランチのクリーンアップ、semver 分析、競合解決のサポート
  • ./references/lane-provisioning.md - new-lane.sh が作成・適用する内容と、lane-work の永続性
  • ./references/land-all.md - バッチ取り込みの全容:トリガー、ステータステーブル、fleet-ops コマンド、競合、クリーンアップ

コメント