git:compare-worktrees について
Git worktree 間のファイルやディレクトリの差分を比較するコマンドです。パスやブランチで対象を選び、変更統計も表示できるため、ブランチのレビューや実装比較に利用できます。
主な機能
- 01worktree を一覧表示して選択
- 02ファイルやディレクトリの差分を比較
- 03ブランチ名から対象を特定
- 04変更統計を表示
- 05バイナリと権限の差異を報告
活用シーン
- 01フィーチャーブランチの変更を確認
- 02ブランチ間の実装を比較
- 03マージ前にソースとテストを確認
- 04指定ファイルの差分をすばやく確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ neolabhq/ context-engineering-kit --skill git:compare-worktreesインストール後、Claude Code で/git:compare-worktreesを入力して読み込まれたか確認します。
詳細
Claude コマンド:ワークツリーを比較する
このコマンドは、Git のワークツリー間でファイルやディレクトリを比較し、ブランチやワークツリー間のコードの違いを把握できるようにします。
手順
重要:以下の手順を記載どおりに実行してください。
-
現在の状態を確認:
git worktree listを実行し、既存のすべてのワークツリーとその場所を表示します -
ユーザー入力を解析:指定された各引数を分類します。
- 引数なし:対話モード。何を比較するかユーザーに尋ねます
--stat:差分の概要統計(変更されたファイル数、追加行数、削除行数)を表示します- ワークツリーのパス:
git worktree listにあるワークツリーのルートのいずれかと一致するパスです - ブランチ名:いずれかのワークツリーのブランチと一致する名前です
- ファイル/ディレクトリのパス:現在のワークツリー内で比較するパスです
-
比較対象を決定(比較するワークツリー): a. ユーザーがワークツリーのパスを指定した場合:それらを比較対象として使用します b. ユーザーがブランチ名を指定した場合:
git worktree listから該当ブランチのワークツリーを探します c. 現在のワークツリー以外にワークツリーが1つだけある場合:現在のワークツリーとそのワークツリーを比較対象として使用します d. 複数のワークツリーがあり、指定がない場合:一覧を表示し、どれを比較するかユーザーに尋ねます e. 他のワークツリーがない場合:git diffを使ってブランチと比較することを提案します -
比較する対象を決定(ワークツリー内のファイル/ディレクトリ): a. ユーザーがファイルまたはディレクトリのパスを指定した場合:指定されたものをすべて比較します b. 特定のパスが指定されていない場合、ユーザーに尋ねます。
- 「ワークツリー全体を比較しますか?」または
- 「特定のファイル/ディレクトリを比較しますか?(パスを入力)」
-
比較を実行:
ワークツリー間の特定のファイルの場合:
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> -
結果を整形して提示:
- 比較内容がわかる明確な見出しを表示します
- 差分が大きい場合は、まず概要を表示するかユーザーに確認します
- 重要な変更(新規ファイル、削除されたファイル、名前が変更されたファイル)を強調します
- 各ワークツリーに含まれるブランチの情報を示します
比較モード
| モード | 説明 | コマンドパターン |
|---|---|---|
| ファイル差分 | ワークツリー間の単一ファイルを比較します | 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>でワークツリーを作成します
「ワークツリー内にパスが存在しません」
- 指定したファイル/ディレクトリが、いずれかのワークツリーに存在しない可能性があります
- これは、一方のブランチでファイルが追加または削除されたことを示している可能性があります
- コマンドは比較結果にその旨を報告します