merge について
mergeは、機能ブランチをmainへ統合するGitワークフローのスキルです。同期・マージ・整理の手順を定め、通常は早送りマージを優先し、ブランチ削除やworktreeの削除前に確認します。
主な機能
- 01早送りマージを優先
- 02分岐時にマージコミットを作成
- 03競合時に停止して報告
- 04更新したmainをプッシュ
- 05ブランチとworktreeの対話的な整理
活用シーン
- 01機能ブランチのmainへの統合
- 02分岐やマージ競合の安全な処理
- 03統合後のリモートブランチとworktree削除の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill mergeインストール後、Claude Code で/mergeを入力して読み込まれたか確認します。
詳細
マージ
merge-and-cleanup と merge-to-main を1つのフローに統合します。デフォルトではファストフォワードを使用し、ファストフォワードができない場合、またはユーザーが希望した場合はマージコミットを保持します。ブランチやワークツリーの削除については、必ずユーザーに確認します。
フロー
- すでに main にいる場合は拒否します。
git rev-parse --abbrev-ref HEADがmain(またはmaster)を返した場合は停止して報告します。マージするものはありません。 - 作業ツリーをクリーンな状態にします。 未コミットの変更がある場合は、コミット、スタッシュ、または中止のどれにするかユーザーに確認します。黙ってスタッシュしてはいけません。
- フィーチャーブランチ名を取得します —
FEATURE=$(git rev-parse --abbrev-ref HEAD)。 - main を同期します。
git checkout maingit pull --ff-only origin main
- まずファストフォワードマージを試します。
git merge --ff-only "$FEATURE"- 成功した場合、履歴は直線的です。マージの手順はこれで完了です。
- 失敗した場合(ブランチが分岐している場合)、手順6に進みます。
- マージコミットに切り替えます —
git merge --no-ff "$FEATURE"。- コンフリクトが発生した場合は停止して報告します。自動で解決してはいけません。
- 意味のあるマージコミットメッセージを記述します。単に「Merge branch …」となるデフォルトのメッセージは受け入れないでください。
- プッシュします —
git push origin main。 - クリーンアップについてユーザーに確認します。 「
$FEATURE(ローカルとリモート)と、関連するワークツリーを削除しますか?」と尋ねます。- はいの場合:
$FEATUREのワークツリーが存在する場合(git worktree list | grep -F "$FEATURE")、先にメインリポジトリのディレクトリへcdしてから、git worktree remove <path>を実行します。git branch -d "$FEATURE"を実行します(ユーザーが明示的に確認した場合に限り-Dを使用します。-dはブランチがマージされていない場合に拒否します。これが望ましい安全策です)。git push origin --delete "$FEATURE"を実行します(ブランチがプッシュされていない場合の失敗は無視します)。
- いいえの場合:何も変更せずに残します。
- はいの場合:
- 最終状態を報告します — main 上のコミットハッシュ、ブランチが削除されたかどうか、ワークツリーが削除されたかどうかを報告します。
注意事項
- ff-only を優先します。 直線的な履歴のほうが把握しやすいためです。ブランチが実際に分岐している場合に限り、マージコミットに切り替えます。
--no-verifyは決して使いません。 pre-push フックに失敗した場合は、根本原因を修正します。回避してはいけません。- ワークツリーを先にクリーンアップします。 フィーチャーブランチがワークツリーで開発された場合、そのワークツリー内からブランチを削除することはできません。必ず先にメインリポジトリの作業ディレクトリへ
cdしてください。 - コンフリクトへの対応方針。 このスキルではコンフリクトを自動解決しません。
git mergeがコンフリクトを報告した場合は停止し、ユーザーに伝えます。どうするかはユーザーが判断します。
注意が必要な点
- main 上で
git pull --ff-onlyが失敗するのは、main がローカルで分岐している場合です(たとえば、main に直接コミットした場合)。これは別の問題なので、表面化させてください。--rebaseで取り繕ってはいけません。 git branch -dはマージされていないブランチの削除を拒否します。この拒否は安全策です。自動的に-Dに切り替えてはいけません。- リモートブランチが存在しない場合、
git push origin --deleteはゼロ以外で終了します。このフローでは問題ありません(ブランチがローカルにしか存在しなかった場合です)。記録して処理を続けてください。 - macOS の大文字小文字を区別しないファイルシステムでは、大文字小文字だけが異なるコンフリクトが見えないことがあります。フィーチャーブランチ名が別のブランチ名と大文字小文字だけ異なる場合、
git checkoutの動作に注意してください。
コメント
Markdown 対応