rebase について
rebase は、引数に応じて対象ブランチを選び、現在のブランチをリベースするスキルです。ローカル変更を退避し、競合への対処を進め、成功後に作成した退避内容を戻します。
主な機能
- 01引数によるリベース先の選択
- 02リベース前のローカル変更の退避
- 03対象ブランチの最近の変更確認
- 04競合発生後のリベース継続
- 05成功後の作成した退避内容の復元
活用シーン
- 01設定済みの基点ブランチへのリベース
- 02origin/main または指定したリモートブランチへのリベース
- 03ローカル変更を保ちながらのブランチ整理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ raine/ workmux --skill rebaseインストール後、Claude Code で/rebaseを入力して読み込まれたか確認します。
詳細
現在のブランチをリベースします。
引数:$ARGUMENTS
動作:
- 引数がない場合:現在のブランチの workmux ベースブランチ
(
git config branch.<current>.workmux-base)を対象にリベースします。設定がなければローカルの main を使用します。 - "origin":origin をフェッチし、origin/main を対象にリベースします。
- "origin/branch":origin をフェッチし、origin/branch を対象にリベースします。
- "branch":ローカルブランチを対象にリベースします(ローカルの main へのリベースを強制するには "main" を使用します)。
手順:
git status --porcelainでローカルの変更を確認します:- 作業ツリーにステージ済み、未ステージ、または未追跡の変更がある場合は、
git stash push --include-untracked -m "workmux rebase"で退避します。 - このコマンドで stash が作成されたかどうかを記録します。既存の stash エントリには 手を加えないでください。
- stash に失敗した場合は、フェッチやリベースを行わずに停止します。
- 作業ツリーにステージ済み、未ステージ、または未追跡の変更がある場合は、
- 引数を解析します:
- 引数なし → 対象は現在のブランチの workmux ベースブランチ
(
git config --get branch.$(git branch --show-current).workmux-base)です。これが 空の場合は、対象を "main" にします。フェッチは行いません。 - "/" を含む場合(例:"origin/develop")→ リモートとブランチに分割し、リモートをフェッチして、 対象を remote/branch にします。
- "origin" のみの場合 → origin をフェッチし、対象を "origin/main" にします。
- それ以外 → そのブランチ名を対象にします。フェッチは行いません。
- 引数なし → 対象は現在のブランチの workmux ベースブランチ
(
- フェッチが必要な場合は、
git fetch <remote>を実行します。フェッチまたは対象の解決が リベース開始前に失敗した場合は、停止する前に手順 1 で作成した stash を復元します。 git rebase <target>を実行します。- 競合が発生した場合は、以下の手順に従って慎重に対処します。
- リベースが完了するまで続行します。
- 手順 1 で stash を作成した場合は、
git stash pop --indexで復元します:- stash の復元はリベースが成功した後にのみ行います。
- 復元時に競合が発生した場合は、stash を保持し、競合を報告して、 該当ファイルは手動で解決できる状態にしておきます。
競合への対処:
- 競合を解決する前に、対象ブランチで各競合ファイルにどのような変更が加えられたかを確認します。
- 競合している各ファイルについて、対象ブランチでのそのファイルの最近の変更を確認するため、
git log -p -n 3 <target> -- <file>を実行します。 - 対象ブランチの変更とこちらのブランチの変更の両方を保持することが目標です。
- 各競合の解決後、ファイルをステージし、
git rebase --continueで続行します。 - 競合が複雑すぎる、または不明瞭な場合は、先に進む前に指示を求めてください。
コメント
Markdown 対応