git:merge-worktree について
Git worktreeの変更を現在のブランチに取り込む手順を案内するClaudeコマンドです。ファイル、パッチ、コミット、ブランチ全体のほか、複数のworktreeから選んだ変更を扱えます。
主な機能
- 01worktree一覧とリポジトリ状態の確認
- 02取得元worktreeまたはブランチの選択
- 035種類のマージ方法
- 04パッチの変更単位を対話的に選択
- 05変更の確認とコンフリクト解決
- 06マージ後のworktree削除を提案
活用シーン
- 01別のworktreeから単一ファイルを取り込む
- 02特定のパッチ部分だけを選ぶ
- 03コミットの一部を適用する
- 04複数のworktreeからファイルを組み合わせる
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ neolabhq/ context-engineering-kit --skill git:merge-worktreeインストール後、Claude Code で/git:merge-worktreeを入力して読み込まれたか確認します。
詳細
Claude コマンド:Worktree のマージ
このコマンドでは、単純なファイルのチェックアウトから選択的なチェリーピックまで、複数のマージ方法に対応しながら、ユーザーが git worktree の変更を現在のブランチにマージできるよう支援します。
手順
重要:以下の手順を記載どおりに正確に実行してください。
-
現在の状態を確認する:
git worktree listを実行して既存のすべての worktree を表示し、git statusを実行して作業ディレクトリの状態を確認します -
ユーザー入力を解析する:ユーザーが希望するマージ操作を判断します。
--interactiveまたは引数なし:ガイド付きの対話モード- ファイル/ディレクトリのパス:worktree から特定のファイルまたはディレクトリをマージ
- コミット名:特定のコミットをチェリーピック
- ブランチ名:そのブランチの worktree からマージ
--from <worktree>:ソースの worktree を明示的に指定--patchまたは-p:対話的なパッチ選択モードを使用
-
ソースの worktree/ブランチを特定する: a. ユーザーが
--from <worktree>を指定した場合:その worktree のパスを直接使用します b. ユーザーがブランチ名を指定した場合:git worktree listからそのブランチの worktree を探します c. 他の worktree が 1 つだけ存在する場合:それをソースとして使用するか、ユーザーに確認します d. 複数の worktree が存在する場合:一覧を表示し、どれからマージするかユーザーに確認します e. 他の worktree が存在しない場合:その旨を説明し、代わりにブランチベースのマージを提案します -
マージ方法を決める:ユーザーのニーズに合わせて選択肢を提示します。
方法 A:ファイルを選択してチェックアウト(特定のファイル/ディレクトリ向け)
- 最適な用途:別のブランチからファイル全体を取得する場合
- コマンド:
git checkout <branch> -- <path>
方法 B:対話的なパッチ選択(ファイルの一部の変更向け)
- 最適な用途:ファイルから特定のハンク/行を選択する場合
- コマンド:
git checkout -p <branch> -- <path> - 各ハンクについてユーザーに確認します:y(適用)、n(スキップ)、s(分割)、e(編集)
方法 C:選択的なステージングを伴うチェリーピック(特定のコミット向け)
- 最適な用途:一部の変更を除外してコミットを適用する場合
- 手順:
git cherry-pick --no-commit <commit>- ステージされた変更を確認します
git reset HEAD -- <unwanted-files>でステージを解除しますgit checkout -- <unwanted-files>で変更を破棄しますgit commit -m "message"
方法 D:コンフリクトを伴う手動マージ(複雑なマージ向け)
- 最適な用途:解決方法を管理しながらブランチ全体をマージする場合
- 手順:
git merge --no-commit <branch>- すべての変更を確認します
- ファイルを選択してステージ/ステージ解除します
- コンフリクトがあれば解決します
git commit -m "message"
方法 E:複数の worktree からの選択的マージ(複数のソースからまとめる場合)
- 最適な用途:異なる worktree から別々のファイルを取得する場合
- 手順:
git checkout <branch1> -- <path1>git checkout <branch2> -- <path2>git commit -m "Merge selected files from multiple branches"
-
選択した方法を実行する:
- ユーザーが変更を確認したい場合は、マージ前に比較を実行します(最初に
/git:compare-worktreesの使用を提案します) - 選択した方法の git コマンドを実行します
- 発生したコンフリクトに対処します
- 最終コミットの前に変更を確認します
- ユーザーが変更を確認したい場合は、マージ前に比較を実行します(最初に
-
マージ後の概要:マージした内容を表示します。
- 変更/追加/削除されたファイル
- ソースの worktree/ブランチ
- 使用したマージ方法
-
クリーンアップの確認:マージが成功した後、次のように尋ねます。
- 「ローカルの状態を整理するため、worktree を削除しますか?」
- はいの場合:worktree の一覧を表示し、削除するものをユーザーに確認します
- 選択された worktree に対して
git worktree remove <path>を実行します - 必要に応じて
git worktree pruneを実行するよう案内します
マージ戦略のリファレンス
| 戦略 | 使用する場面 | コマンドのパターン |
|---|---|---|
| ファイルを選択 | 別のブランチからファイルを丸ごと取得する場合 | git checkout <branch> -- <path> |
| 対話型パッチ | ファイル内の特定の変更だけが必要な場合 | git checkout -p <branch> -- <path> |
| チェリーピックで選択 | コミットが必要だが、その変更をすべて取り込む必要はない場合 | git cherry-pick --no-commit + 選択的なステージング |
| 手動マージ | 制御しながらブランチを丸ごとマージする場合 | git merge --no-commit + 選択的なステージング |
| 複数のソース | 複数のブランチからファイルを組み合わせる場合 | 複数の git checkout <branch> -- <path> |
例
worktree から単一のファイルをマージする:
> /git:merge-worktree src/app.js --from ../project-feature
# Prompts for merge strategy
# Executes: git checkout feature-branch -- src/app.js
対話形式でパッチを選択する:
> /git:merge-worktree src/utils.js --patch
# Lists available worktrees to select from
# Runs: git checkout -p feature-branch -- src/utils.js
# User selects hunks interactively (y/n/s/e)
特定のコミットをチェリーピックする:
> /git:merge-worktree abc1234
# Detects commit hash
# Asks: Apply entire commit or selective?
# If selective: git cherry-pick --no-commit abc1234
# Then guides through unstaging unwanted changes
複数の worktree からマージする:
> /git:merge-worktree --interactive
# "Select files to merge from different worktrees:"
# "From feature-1: src/moduleA.js"
# "From feature-2: src/moduleB.js, src/moduleC.js"
# Executes selective checkouts from each
ガイド付きの完全モード:
> /git:merge-worktree
# Lists all worktrees
# Asks what to merge (files, commits, or branches)
# Guides through appropriate strategy
# Offers cleanup at end
競合を含むディレクトリをマージする:
> /git:merge-worktree src/components/ --from ../project-refactor
# Strategy D: Manual merge with conflicts
# git merge --no-commit refactor-branch
# Helps resolve any conflicts
# Reviews and commits selected changes
対話型パッチモードのガイド
--patch または戦略 B を使用すると、各変更ハンクについて次のプロンプトが表示されます。
@@ -10,6 +10,8 @@ function processData(input) {
const result = transform(input);
+ // Added validation
+ if (!isValid(result)) throw new Error('Invalid');
return result;
}
Apply this hunk? [y,n,q,a,d,s,e,?]
| キー | 操作 |
|---|---|
y | このハンクを適用します |
n | このハンクをスキップします |
q | 終了します(このハンクと残りのハンクを適用しません) |
a | このハンクと残りのすべてのハンクを適用します |
d | このファイルでは、このハンクと残りのハンクを適用しません |
s | より小さなハンクに分割します |
e | ハンクを手動で編集します |
? | ヘルプを表示します |
チェリーピックで選択するワークフロー
戦略 C(選択的なステージングを行いながらチェリーピックする場合):
# 1. Apply commit without committing
git cherry-pick --no-commit abc1234
# 2. Check what was staged
git status
# 3. Unstage files you don't want
git reset HEAD -- path/to/unwanted.js
# 4. Discard changes to those files
git checkout -- path/to/unwanted.js
# 5. Commit the remaining changes
git commit -m "Cherry-pick selected changes from abc1234"
複数の worktree をマージするワークフロー
戦略 E(複数の worktree からマージする場合):
# Get files from different branches
git checkout feature-auth -- src/auth/login.js src/auth/session.js
git checkout feature-api -- src/api/endpoints.js
git checkout feature-ui -- src/components/Header.js
# Review all changes
git status
git diff --cached
# Commit combined changes
git commit -m "feat: combine auth, API, and UI improvements from feature branches"
よくあるワークフロー
マージせずに機能ファイルを取り込む
> /git:merge-worktree src/new-feature.js --from ../project-feature
# Gets just the file, not the entire branch
Hotfix ブランチからバグ修正を部分的に取り込む
> /git:merge-worktree --patch src/utils.js --from ../project-hotfix
# Select only the specific bug fix hunks, not all changes
複数の PR の変更を組み合わせる
> /git:merge-worktree --interactive
# Select specific files from PR-1 worktree
# Select other files from PR-2 worktree
# Combine into single coherent commit
マージ前のレビュー
# First review what will be merged
> /git:compare-worktrees src/module.js
# Then merge with confidence
> /git:merge-worktree src/module.js --from ../project-feature
重要な注意事項
-
作業ディレクトリの状態:マージする前に、作業ディレクトリがクリーンであることを必ず確認してください。コミットされていない変更は競合の原因になる場合があります。
-
マージ前のレビュー:マージによって適用される変更を把握するために、事前に
/git:compare-worktreesを使用することを検討してください。 -
競合の解決:マージ中に競合が発生した場合、コミットする前にコマンドが競合を特定し、解決する手助けをします。
-
コミットしないフラグ:ほとんどの戦略では
--no-commitを使用し、最終的なコミットメッセージと含める内容を自分で制御できるようにします。 -
共有リポジトリ:すべての worktree は同じ Git オブジェクトデータベースを共有しているため、どの worktree で作成したコミットも、ほかの worktree からすぐにチェリーピックできます。
-
ブランチのロック:ブランチは同時に 1 つの worktree でのみチェックアウトできます。worktree を重複して作成するのではなく、マージ操作にはブランチ名を使用してください。
マージ後のクリーンアップ
マージ後、不要になった worktree のクリーンアップを検討してください。
# List worktrees
git worktree list
# Remove specific worktree (clean state required)
git worktree remove ../project-feature
# Force remove (discards uncommitted changes)
git worktree remove --force ../project-feature
# Clean up stale worktree references
git worktree prune
作業環境を整頓できるよう、マージが成功するたびにコマンドからクリーンアップについて確認があります。
トラブルシューティング
「マージできません:作業ディレクトリにコミットされていない変更があります」
- まず現在の変更をコミットするか、stash に保存してください
- または、マージの前に
git stashを実行し、その後git stash popを実行してください
「 でマージ競合が発生しました」
- コマンドに競合しているファイルが表示されます
- ファイルを開いて競合を解決してください(
<<<<<<<マーカーを探します) - 解決したファイルを
git add <file>でステージしてください git commitを実行して続行してください
チェリーピック時に「コミットが見つかりません」と表示される
- コミットハッシュが正しいことを確認してください
- いずれかの worktree で
git log <branch>を実行し、コミットを探してください - コミットはすべての worktree で共有されています
「チェックアウトできません:作業ツリーにファイルが存在します」
- ファイルにローカルの変更があります
- まずローカルの変更をコミット、stash、または破棄してください
- その後、マージ操作を再試行してください
「worktree のブランチが見つかりません」
- 指定された worktree が削除されている可能性があります
git worktree listを実行して、現在の worktree を確認してください- 古い参照を整理するには
git worktree pruneを使用してください
その他のコマンドとの連携
マージ前のレビュー:
> /git:compare-worktrees src/
> /git:merge-worktree src/specific-file.js
worktree の作成、マージ、クリーンアップ:
> /git:create-worktree feature-branch
> /git:compare-worktrees src/
> /git:merge-worktree src/module.js --from ../project-feature-branch
# After merge, cleanup is offered automatically