⚔️ 第三章:魔王との対決 (Git Merge & コンフリクト解決)
前章では、並行宇宙(Branch)で新機能を開発する方法を学びました。
feature/cart ブランチでショッピングカートを完成させ、テストも完璧に終えたら、次は**「ショッピングカート機能をメインの main 宇宙に統合(Merge)する」**という大仕事が待っています。
もしあなたと同僚が同じ行を変更していなければ、マージは一瞬で終わります。
しかし...
あなたが index.html の10行目を変更し、
同僚もたまたま index.html の10行目を変更していた場合、
マージを実行するとGitは真っ赤なエラーを吐き、**Merge Conflict(マージコンフリクト)**が発生したと告げます!
恐れることはありません!コンフリクト解決はエンジニアの日常です。この章ではVibe Coding流でエレガントに解決する方法を教えます。
🤝 平和な融合:最も基本的なMerge操作
まずは「コンフリクトが発生しない」理想的なマージの流れから学びましょう。
💡 Vibe Prompt 実践1:安全なマージ標準作業手順(SOP)
自分で適当にコマンドを打つのではなく、重要なマージの際はAIにSOPを聞きましょう!
[!IMPORTANT] 以下のPromptをAIに送信してください:
"feature/cart"ブランチでショッピングカートの開発を完了し、git commitも実行しました。このブランチのコードを"main"ブランチにマージしたいです。安全な標準コマンド手順と、マージ完了後に"feature/cart"を削除する方法を教えてください。
🤖 AIが生成した実際の返答とコマンド:
# ステップ1:まず「受け取り側」の宇宙(メインのmain)に切り替える
git switch main
# ステップ2:マージコマンドを実行し、feature/cartの変更を取り込む
git merge feature/cart
# ステップ3:(任意)マージが問題なく完了したら、不要な開発ブランチを削除
git branch -d feature/cart
🔍 深層解説:
マージの概念は「大きな魚が小さな魚を食べる」ようなものです。**まず大きな魚になる(switch main)ことが重要で、それから小さな魚を食べる(merge feature/cart)**のです。順序を逆にして開発ブランチでmerge mainを実行すると、プロジェクトが大混乱に陥ります!
💥 災害発生:Merge Conflictの恐怖の記号を理解する
git mergeを実行した際、ターミナルに以下のメッセージが表示されたら:
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
おめでとうございます!あなたはコンフリクトを引き当てました。
この状態でindex.htmlを開くと、コード中に謎の記号が大量に出現しています:
<<<<<<< HEAD
<button class="bg-blue-500">通常ログイン</button>
=======
<button class="bg-red-500">Googleログイン</button>
>>>>>>> feature/google-login
これはウイルスではなく、GitからのSOS信号です!
💡 Vibe Prompt 実践2:AIにコンフリクト記号の翻訳を依頼
[!IMPORTANT] 以下のPromptをAIに送信してください:
git mergeを実行したらコンフリクトが発生しました。ファイルを開くと、<<<<<<< HEAD, =======, >>>>>>> といった奇妙な記号が見つかりました。これらの3行の記号がそれぞれ何を意味するのか、最も分かりやすく説明してください。そして、このテキストをどう処理すべきか教えてください。
🤖 AIの超分かりやすい解説:
これらの記号はGitが描いた「区切り線」で、両者の意見がどこで食い違っているかを示しています:
1. <<<<<<< HEAD から ======= まで:
【現在のブランチ(通常はmain)】のコード。
つまり元々のファイルの状態。
2. ======= から >>>>>>> feature/google-login まで:
【マージしようとしているブランチ】のコード。
💡 あなたの任務(コンフリクト解決):
裁判官のように判断を下す必要があります。
1. 奇妙な記号(<<<<, ====, >>>>)を手動で削除。
2. どちらのコードを残すか?または両方を少し修正して残すか?
3. 保存後、git addとgit commitを再実行。
🤖 AI仲裁者:コンフリクトファイル全体をAIに任せる
両方のコードの違いが分からない場合や、双方の良いところを取り入れたい場合は、**「コンフリクト記号付きのコードをそのままAIにコピペして、きれいなコードを書き直してもらう」**のが最善策です。
💡 Vibe Prompt 実践3:AIに複雑なコンフリクト解決を依頼
[!IMPORTANT] 以下のPromptをAIに送信してください:
index.htmlでGitコンフリクトが発生しました。以下はコンフリクト記号を含むソースコードです:
<<<<<<< HEAD<div class="header">Vibe Tutorへようこそ(青テーマ)</div>=======<div class="header" id="main-title">Vibe Tutorへようこそ - アップグレード版</div>>>>>>>> feature/new-title
このコンフリクトを解決してください。要件:feature/new-titleのid="main-title"属性と「アップグレード版」の文字は残しつつ、HEADの「(青テーマ)」も保持したいです。Git記号を含まない、解決後のきれいなHTMLコードを生成してください。
🤖 AIが生成した完璧な仲裁コード:
<!-- AIが両方の要件を完璧に融合し、すべての醜い記号を除去 -->
<div class="header" id="main-title">Vibe Tutorへようこそ - アップグレード版(青テーマ)</div>
🔍 深層解説: Vibe Coding時代では、波括弧やタグの中から削除すべき行を探す必要はありません。「何を保持したいか」を明確に伝えれば、AIが1秒で完璧な融合コードを生成します。このきれいなコードをVSCodeに貼り付けて保存すれば完了です!
😅 後悔薬:恐ろしいマージを中断する方法
時にはコンフリクトが多すぎて(例えば数十ファイルが同時にコンフリクト)、目がくらくらし「マージなんてやめたい!マージ前の状態に戻りたい!」と思うこともあります。
そんな時、Gitは最強の「後悔薬」を提供しています。
💡 Vibe Prompt 実践4:マージを中止して戦場から離脱
[!IMPORTANT] 以下のPromptをAIに送信してください:
git mergeを実行したら、あまりにも多くのファイルでコンフリク���が発生しました。処理したくありません。このマージを「中止(Abort)」し、git mergeを実行する前の状態に完全に戻す方法を教えてください。対応するコマンドを教えてください。
🤖 AIが生成した実際の返答とコマンド:
# これは無敵の後悔薬です!
# マージコンフリクト状態(まだcommitしていない)であれば、このコマンドを実行:
git merge --abort
# プロジェクトはタイムマシンに乗ったように、git mergeを実行する直前の状態に戻ります!
# すべての<<<<<< HEAD記号が一瞬で消えます。
🛠️ VSCodeの神機能
実は現代のエディタ(VSCodeやCursorなど)では、コンフリクト解決がボタン一発でできるようになっています。
VSCodeでコンフリクトファイルを開くと、<<<<< HEADの上に4つの小さなボタン(Code Lens)が表示されます:
- Accept Current Change(現在の変更を保持=HEAD)
- Accept Incoming Change(マージしてくる変更を保持)
- Accept Both Changes(両方の変更を保持→後でゆっくり修正)
- Compare Changes(両者の違いを並べて比較)
💡 Vibe Prompt 実践5:エディタテクニックを質問
[!IMPORTANT] 以下のPromptをAIに送信してください:
VSCodeでGitマージコンフリクトを処理しています。画面に"Accept Current Change"と"Accept Incoming Change"ボタンが表示されています。VSCodeにおいて"Current"はどちらを指す?"Incoming"は?もしボタンをクリックした後に後悔したら、どうやって元に戻せばいいですか?
🤖 AIの専門的な指導:
- Current(現在):
HEADを指し、**「マージを実行した時の宇宙(通常はmain)」**です。 - Incoming(伝来):**「マージしようとしている並行宇宙」**を指します。
- 間違えた場合は、
Ctrl + Z(MacはCmd + Z)で即座に元に戻せます!
✅ 本章のまとめとデバッグ心得
この章を学んだ後は、Gitマージコンフリクトに遭遇しても興奮すべきで、恐怖を感じる必要はありません!
- SOP:必ずまず
mainに切り替えてから、他人のブランチをmergeする。 - 記号理解:
HEADが元のコード、もう一方が新しくマージしてくるコード。 - 究極の解決法:コンフリクト部分全体をAIにコピペし、保持したいロジックを伝えてきれいなコードを受け取る。
- 撤退戦略:失敗したら
git merge --abortで一発タイムリセット。
ブランチ開発とコンフリクト解決をマスターしたあなたのローカル開発スキルは完璧です。 次は、あなたの作品を全世界に公開しましょう! 次章:第四章:無料公開!GitHub Pagesデプロイ秘伝では、完成したコードをクラウドにアップロードし、無料で実際のウェブサイトURLにする方法を教えます!