import文のコンフリクト解決

複数のブランチが異なるモジュールを追加したimport/requireブロックのコンフリクトを修正します。Accept BothとManual Editの使い分けを学びます。

Multi-Conflict Files

詳細な説明

import文のコンフリクト

importのコンフリクトは、モダンなJavaScript/TypeScriptプロジェクトで最も頻繁に発生するマージコンフリクトの1つです。2つのブランチが同じファイルに新しいimport文を追加した場合、特にインポートがまとめられているファイル上部で発生します。

なぜimportがよくコンフリクトするのか

ほとんどのスタイルガイドやオートフォーマッターはimportをアルファベット順またはカテゴリ別にソートします。2つのブランチが同じアルファベット位置に新しいimportを追加すると、Gitは同じ行への重複変更として認識します:

<<<<<<< HEAD
import { useState, useEffect } from "react";
import { Button } from "@/components/ui/button";
import { Dialog } from "@/components/ui/dialog";
=======
import { useState, useCallback } from "react";
import { Button } from "@/components/ui/button";
import { Tooltip } from "@/components/ui/tooltip";
>>>>>>> feature/add-tooltips

解決アプローチ

importのコンフリクトは、両方のブランチが正当な依存関係を追加しているため、ほぼ必ずManual Editが必要です。正しい解決は両側のユニークなimportを結合することです:

import { useState, useEffect, useCallback } from "react";
import { Button } from "@/components/ui/button";
import { Dialog } from "@/components/ui/dialog";
import { Tooltip } from "@/components/ui/tooltip";

避けるべき落とし穴

  • 重複import: 不注意なマージで同じモジュールを2回importすると、ビルドエラーが発生します。
  • 未使用import: 一方のブランチがimportを削除し、もう一方が保持した場合、そのimportがまだ必要かどうか確認してください。
  • 循環依存: 両方のブランチのimportをマージした後、循環importチェーンが導入されていないか確認してください。

自動化のヒント

importコンフリクト解決後にリンターやフォーマッターを実行してください。ESLintのimport/orderルールやPrettierがソートの整理と未使用importの自動削除を行います。

ユースケース

同じページに新しいUIコンポーネントを追加した2つのfeatureブランチをマージしています。両方のブランチが同じ場所にimportを追加したため、ファイル上部のimportセクションがコンフリクトします。

試してみる — Git Conflict Resolver

フルツールを開く