mcpField
G
git:compare-worktrees

git:compare-worktrees

github.com/neolabhq開発1.8k443 回インストール10 週間前に更新
リポジトリ

git:compare-worktrees について

Git worktree 間のファイルやディレクトリの差分を比較するコマンドです。パスやブランチで対象を選び、変更統計も表示できるため、ブランチのレビューや実装比較に利用できます。

主な機能

  1. 01worktree を一覧表示して選択
  2. 02ファイルやディレクトリの差分を比較
  3. 03ブランチ名から対象を特定
  4. 04変更統計を表示
  5. 05バイナリと権限の差異を報告

活用シーン

  1. 01フィーチャーブランチの変更を確認
  2. 02ブランチ間の実装を比較
  3. 03マージ前にソースとテストを確認
  4. 04指定ファイルの差分をすばやく確認

インストール

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

$npx skills add https://github.com/neolabhq/context-engineering-kit --skill git:compare-worktrees

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

詳細

Claude コマンド:ワークツリーを比較する

このコマンドは、Git のワークツリー間でファイルやディレクトリを比較し、ブランチやワークツリー間のコードの違いを把握できるようにします。

手順

重要:以下の手順を記載どおりに実行してください。

  1. 現在の状態を確認:git worktree list を実行し、既存のすべてのワークツリーとその場所を表示します

  2. ユーザー入力を解析:指定された各引数を分類します。

    • 引数なし:対話モード。何を比較するかユーザーに尋ねます
    • --stat:差分の概要統計(変更されたファイル数、追加行数、削除行数)を表示します
    • ワークツリーのパス:git worktree list にあるワークツリーのルートのいずれかと一致するパスです
    • ブランチ名:いずれかのワークツリーのブランチと一致する名前です
    • ファイル/ディレクトリのパス:現在のワークツリー内で比較するパスです
  3. 比較対象を決定(比較するワークツリー): a. ユーザーがワークツリーのパスを指定した場合:それらを比較対象として使用します b. ユーザーがブランチ名を指定した場合:git worktree list から該当ブランチのワークツリーを探します c. 現在のワークツリー以外にワークツリーが1つだけある場合:現在のワークツリーとそのワークツリーを比較対象として使用します d. 複数のワークツリーがあり、指定がない場合:一覧を表示し、どれを比較するかユーザーに尋ねます e. 他のワークツリーがない場合:git diff を使ってブランチと比較することを提案します

  4. 比較する対象を決定(ワークツリー内のファイル/ディレクトリ): a. ユーザーがファイルまたはディレクトリのパスを指定した場合:指定されたものをすべて比較します b. 特定のパスが指定されていない場合、ユーザーに尋ねます。

    • 「ワークツリー全体を比較しますか?」または
    • 「特定のファイル/ディレクトリを比較しますか?(パスを入力)」
  5. 比較を実行:

    ワークツリー間の特定のファイルの場合:

    diff <worktree1>/<path> <worktree2>/<path>
    # Or for unified diff format:
    diff -u <worktree1>/<path> <worktree2>/<path>
    

    ワークツリー間のディレクトリの場合:

    diff -r <worktree1>/<directory> <worktree2>/<directory>
    # Or for summary only:
    diff -rq <worktree1>/<directory> <worktree2>/<directory>
    

    ブランチ単位の比較(git diff を使用)の場合:

    git diff <branch1>..<branch2> -- <path>
    # Or for stat summary:
    git diff --stat <branch1>..<branch2>
    

    現在の作業ディレクトリとの比較の場合:

    diff <current-file> <other-worktree>/<file>
    
  6. 結果を整形して提示:

    • 比較内容がわかる明確な見出しを表示します
    • 差分が大きい場合は、まず概要を表示するかユーザーに確認します
    • 重要な変更(新規ファイル、削除されたファイル、名前が変更されたファイル)を強調します
    • 各ワークツリーに含まれるブランチの情報を示します

比較モード

モード説明コマンドパターン
ファイル差分ワークツリー間の単一ファイルを比較しますdiff -u <wt1>/file <wt2>/file
ディレクトリ差分ディレクトリを再帰的に比較しますdiff -r <wt1>/dir <wt2>/dir
概要のみ異なるファイルを表示します(内容は表示しません)diff -rq <wt1>/ <wt2>/
Git 差分Git の diff を使用します(ブランチベース)git diff branch1..branch2 -- path
統計表示変更の統計を表示しますgit diff --stat branch1..branch2

ワークツリーの検出

このコマンドは git worktree list を使ってワークツリーを検出します。

/home/user/project           abc1234 [main]
/home/user/project-feature   def5678 [feature-x]
/home/user/project-hotfix    ghi9012 [hotfix-123]

この出力から、コマンドは以下を抽出します。

  • パス:ワークツリーディレクトリへの絶対パス
  • ブランチ:角括弧内のブランチ名(ユーザーがブランチ名を指定した場合に使用)

使用例

ワークツリー間の特定のファイルを比較:

> /git:compare-worktrees src/app.js
# Prompts to select which worktree to compare with
# Shows diff of src/app.js between current and selected worktree

指定した2つのワークツリーを比較:

> /git:compare-worktrees ../project-main ../project-feature src/module.js
# Compares src/module.js between the two specified worktrees

複数のファイル/ディレクトリを比較:

> /git:compare-worktrees src/app.js src/utils/ package.json
# Shows diffs for all three paths between worktrees

ディレクトリ全体を比較:

> /git:compare-worktrees src/
# Shows all differences in src/ directory between worktrees

概要統計を取得:

> /git:compare-worktrees --stat
# Shows which files differ and line counts

対話モード:

> /git:compare-worktrees
# Lists available worktrees
# Asks which to compare
# Asks for specific paths or entire worktree

ブランチ名でブランチのワークツリーと比較:

> /git:compare-worktrees feature-x
# Finds worktree for feature-x branch and compares

ブランチのワークツリー間で特定のパスを比較:

> /git:compare-worktrees main feature-x src/ tests/
# Compares src/ and tests/ directories between main and feature-x worktrees

出力形式

ファイル比較の見出し:

Comparing: src/app.js
  From: /home/user/project (main)
  To:   /home/user/project-feature (feature-x)
---
[diff output]

概要の出力:

Worktree Comparison Summary
===========================
From: /home/user/project (main)
To:   /home/user/project-feature (feature-x)

Files only in main:
  - src/deprecated.js

Files only in feature-x:
  + src/new-feature.js
  + src/new-feature.test.js

Files that differ:
  ~ src/app.js
  ~ src/utils/helpers.js
  ~ package.json

Statistics:
  3 files changed
  2 files added
  1 file removed

よくあるワークフロー

機能変更のレビュー
# See what changed in a feature branch
> /git:compare-worktrees --stat
> /git:compare-worktrees src/components/
実装の比較
# Compare how two features implemented similar functionality
> /git:compare-worktrees ../project-feature-1 ../project-feature-2 src/auth/
ファイルの簡易確認
# Check if a specific file differs
> /git:compare-worktrees package.json
マージ前のレビュー
# Review all changes before merging (compare src and tests together)
> /git:compare-worktrees --stat
> /git:compare-worktrees src/ tests/
# Both src/ and tests/ directories will be compared

重要な注意事項

  • 引数の検出:このコマンドは、git worktree list の出力と照合して引数の種類を自動検出します。

    • ワークツリーのルートと一致するパス → 比較対象のワークツリーとして扱われます
    • ワークツリー内のブランチと一致する名前 → 比較対象のワークツリーとして扱われます
    • その他のパス → ワークツリー内で比較するファイル/ディレクトリとして扱われます
  • 複数のパス:ファイル/ディレクトリのパスが複数指定されている場合、選択したワークツリー間で指定されたすべてのパスを比較します(最初のパスだけではありません)。

  • ワークツリーのパス:ワークツリーを指定する場合は、完全パスまたは現在のディレクトリからの相対パスを使用します(例:../project-feature)。

  • ブランチとワークツリー:ブランチ名を指定すると、そのブランチがチェックアウトされているワークツリーを検索します。そのブランチのワークツリーが存在しない場合は、代わりに git diff を使うよう提案します。

  • 大きな差分:大きなディレクトリの場合、差分全体を表示する前に、まず概要を表示するかどうかを確認します。

  • バイナリファイル:バイナリファイルは検出され、「Binary files differ」として報告されます。実際の差分は表示されません。

  • ファイルのアクセス権:アクセス権に違いがある場合、差分にはその変更も表示されます。

  • ワークツリーがない場合:他にワークツリーが存在しない場合は、ワークツリーの作成方法を説明し、代わりにブランチの比較に git diff を使うか確認します。

Create Worktree との連携

比較用のワークツリーを設定するには、まず /git:create-worktree を使います。

# Create worktrees for comparison
> /git:create-worktree feature-x, main
# Created: ../project-feature-x and ../project-main

# Now compare
> /git:compare-worktrees src/

トラブルシューティング

「他のワークツリーが見つかりません」

  • まず /git:create-worktree <branch> でワークツリーを作成します
  • または、ワークツリーを使わずにブランチのみを比較するには git diff を使います

「ブランチのワークツリーが見つかりません」

  • そのブランチのワークツリーが作成されていない可能性があります
  • git worktree list を実行して、利用可能なワークツリーを確認します
  • /git:create-worktree <branch> でワークツリーを作成します

「ワークツリー内にパスが存在しません」

  • 指定したファイル/ディレクトリが、いずれかのワークツリーに存在しない可能性があります
  • これは、一方のブランチでファイルが追加または削除されたことを示している可能性があります
  • コマンドは比較結果にその旨を報告します

コメント