mcpField
G
git:merge-worktree

git:merge-worktree

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

git:merge-worktree について

Git worktreeの変更を現在のブランチに取り込む手順を案内するClaudeコマンドです。ファイル、パッチ、コミット、ブランチ全体のほか、複数のworktreeから選んだ変更を扱えます。

主な機能

  1. 01worktree一覧とリポジトリ状態の確認
  2. 02取得元worktreeまたはブランチの選択
  3. 035種類のマージ方法
  4. 04パッチの変更単位を対話的に選択
  5. 05変更の確認とコンフリクト解決
  6. 06マージ後のworktree削除を提案

活用シーン

  1. 01別のworktreeから単一ファイルを取り込む
  2. 02特定のパッチ部分だけを選ぶ
  3. 03コミットの一部を適用する
  4. 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 の変更を現在のブランチにマージできるよう支援します。

手順

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

  1. 現在の状態を確認する:git worktree list を実行して既存のすべての worktree を表示し、git status を実行して作業ディレクトリの状態を確認します

  2. ユーザー入力を解析する:ユーザーが希望するマージ操作を判断します。

    • --interactive または引数なし:ガイド付きの対話モード
    • ファイル/ディレクトリのパス:worktree から特定のファイルまたはディレクトリをマージ
    • コミット名:特定のコミットをチェリーピック
    • ブランチ名:そのブランチの worktree からマージ
    • --from <worktree>:ソースの worktree を明示的に指定
    • --patch または -p:対話的なパッチ選択モードを使用
  3. ソースの worktree/ブランチを特定する: a. ユーザーが --from <worktree> を指定した場合:その worktree のパスを直接使用します b. ユーザーがブランチ名を指定した場合:git worktree list からそのブランチの worktree を探します c. 他の worktree が 1 つだけ存在する場合:それをソースとして使用するか、ユーザーに確認します d. 複数の worktree が存在する場合:一覧を表示し、どれからマージするかユーザーに確認します e. 他の worktree が存在しない場合:その旨を説明し、代わりにブランチベースのマージを提案します

  4. マージ方法を決める:ユーザーのニーズに合わせて選択肢を提示します。

    方法 A:ファイルを選択してチェックアウト(特定のファイル/ディレクトリ向け)

    • 最適な用途:別のブランチからファイル全体を取得する場合
    • コマンド:git checkout <branch> -- <path>

    方法 B:対話的なパッチ選択(ファイルの一部の変更向け)

    • 最適な用途:ファイルから特定のハンク/行を選択する場合
    • コマンド:git checkout -p <branch> -- <path>
    • 各ハンクについてユーザーに確認します:y(適用)、n(スキップ)、s(分割)、e(編集)

    方法 C:選択的なステージングを伴うチェリーピック(特定のコミット向け)

    • 最適な用途:一部の変更を除外してコミットを適用する場合
    • 手順:
      1. git cherry-pick --no-commit <commit>
      2. ステージされた変更を確認します
      3. git reset HEAD -- <unwanted-files> でステージを解除します
      4. git checkout -- <unwanted-files> で変更を破棄します
      5. git commit -m "message"

    方法 D:コンフリクトを伴う手動マージ(複雑なマージ向け)

    • 最適な用途:解決方法を管理しながらブランチ全体をマージする場合
    • 手順:
      1. git merge --no-commit <branch>
      2. すべての変更を確認します
      3. ファイルを選択してステージ/ステージ解除します
      4. コンフリクトがあれば解決します
      5. git commit -m "message"

    方法 E:複数の worktree からの選択的マージ(複数のソースからまとめる場合)

    • 最適な用途:異なる worktree から別々のファイルを取得する場合
    • 手順:
      1. git checkout <branch1> -- <path1>
      2. git checkout <branch2> -- <path2>
      3. git commit -m "Merge selected files from multiple branches"
  5. 選択した方法を実行する:

    • ユーザーが変更を確認したい場合は、マージ前に比較を実行します(最初に /git:compare-worktrees の使用を提案します)
    • 選択した方法の git コマンドを実行します
    • 発生したコンフリクトに対処します
    • 最終コミットの前に変更を確認します
  6. マージ後の概要:マージした内容を表示します。

    • 変更/追加/削除されたファイル
    • ソースの worktree/ブランチ
    • 使用したマージ方法
  7. クリーンアップの確認:マージが成功した後、次のように尋ねます。

    • 「ローカルの状態を整理するため、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

コメント