HTMLおよびJSXテンプレートのコンフリクト解決
ネストされたタグ構造により変更箇所の特定が困難なHTMLテンプレートやReact JSXでのコンフリクトを処理します。
Best Practices
詳細な説明
HTMLとJSXテンプレートのコンフリクト
HTML、JSX、Vue SFCファイルのテンプレートコンフリクトは、ネストされたタグ構造により1つの要素の変更が周囲の多くの行のインデントやラッピングに影響するため、困難です。2つのブランチが同じコンポーネントの異なる側面を変更しても、Gitはテンプレートブロック全体をコンフリクトとして認識することがあります。
典型的なJSXコンフリクト
<<<<<<< HEAD
<Card className="p-4">
<CardHeader>
<h2>{title}</h2>
<Badge variant="success">{status}</Badge>
</CardHeader>
<CardBody>{description}</CardBody>
</Card>
=======
<Card className="p-6 shadow-lg">
<CardHeader>
<h2>{title}</h2>
<span className="text-sm text-gray-500">{date}</span>
</CardHeader>
<CardBody>{description}</CardBody>
<CardFooter>
<Button onClick={onAction}>View Details</Button>
</CardFooter>
</Card>
>>>>>>> feature/card-actions
分析アプローチ
テンプレートを論理的なセクションに分解します:
| セクション | HEADの変更 | 取り込み元の変更 |
|---|---|---|
| Cardラッパー | className="p-4" |
className="p-6 shadow-lg" |
| ヘッダーコンテンツ | Badgeを追加 | 日付spanを追加 |
| ボディ | 変更なし | 変更なし |
| フッター | なし | Buttonで追加 |
解決戦略
JSXコンフリクトはほぼ必ずManual Editが必要です。解決バージョンを以下のように構築します:
- 全体の構造から始める(最も完全なバージョンをベースとして使用)。
- 両方のブランチからクラス名とpropsをマージ。
- 両方のブランチからのすべての新しい子要素を含める。
- すべてのタグが正しく開閉されていることを確認。
- JSX式(
{})が正しいことを検証。
よくある落とし穴
- 閉じられていないタグ: 部分的なHTMLのマージでタグが閉じられないことがあります。
- propsの欠落: 一方のブランチからのclassNameの変更を含め忘れる。
- key props: リストレンダリングでマージ後にユニークなキーを確認。
- イベントハンドラー: すべてのonClick、onChangeなどのハンドラーが保持されていることを確認。
検証
解決後、JSXがコンパイルされることを確認してください。JSX厳格モードのTypeScriptはほとんどの構造的エラーを即座にキャッチします。
ユースケース
2つのブランチがReactカードコンポーネントを変更しました — 1つはヘッダーにステータスバッジを追加し、もう1つはアクションボタン付きのフッターを追加してスペーシングを更新しました。JSX構造がコンポーネント全体でコンフリクトします。