関数本体内のコンフリクト解決
2つのブランチがロジック、変数、戻り値を異なる方法で変更した関数実装内のマージコンフリクトを処理します。
Multi-Conflict Files
詳細な説明
関数本体のコンフリクト
2つのブランチが同じ関数の実装を変更した場合、結果のコンフリクトは慎重な分析が必要です。単純な値の変更とは異なり、関数本体のコンフリクトにはロジックフロー、変数の依存関係、副作用が含まれ、すべてが連携して動作する必要があります。
典型的なシナリオ
function calculateTotal(items) {
<<<<<<< HEAD
const subtotal = items.reduce((sum, item) => sum + item.price * item.qty, 0);
const tax = subtotal * 0.08;
const shipping = subtotal > 100 ? 0 : 9.99;
return { subtotal, tax, shipping, total: subtotal + tax + shipping };
=======
const subtotal = items.reduce((sum, item) => sum + item.price * item.quantity, 0);
const discount = applyPromoCode(subtotal);
const tax = (subtotal - discount) * 0.08;
return { subtotal, discount, tax, total: subtotal - discount + tax };
>>>>>>> feature/promo-codes
分析プロセス
解決を選択する前に、各ブランチの変更内容をマッピングします:
| 側面 | HEAD (ours) | 取り込み元 (theirs) |
|---|---|---|
| プロパティ名 | item.qty |
item.quantity |
| 送料ロジック | 100ドル以上で送料無料を追加 | なし |
| プロモコード | なし | 割引計算を追加 |
| 税の計算ベース | 小計全体 | 割引後の小計 |
Manual Editが通常必要な理由
関数本体のコンフリクトがAccept Ours、Accept Theirs、Accept Bothで解決できることはめったにありません。両方のバージョンを連結すると変数宣言の重複と2つのreturn文が作成されます。代わりに、両方のブランチの意図を理解し、送料ロジックとプロモコード割引の両方を含む統一実装を作成する必要があります。
解決後のテスト
解決後は必ず関数のユニットテストを実行してください。テストが存在しない場合は追加しましょう — 2つのブランチが同時に変更した関数は、テストカバレッジを持つに値するほど重要な関数です。
ユースケース
2つのfeatureブランチが独立して同じ価格計算関数を強化しました — 1つは送料無料ロジックを追加し、もう1つはプロモーション割引サポートを追加しました。マージにより関数本体にコンフリクトが発生します。