package.jsonバージョンコンフリクトの解決

package.jsonのバージョンフィールドと依存関係リストのマージコンフリクトを修正します。複数のブランチが同時にnpmパッケージを更新した場合によく発生します。

Basic Conflicts

詳細な説明

Package.jsonのコンフリクト

package.jsonのマージコンフリクトは、JavaScriptおよびTypeScriptプロジェクトで非常に一般的です。2つのブランチが同時に依存関係を追加、削除、または更新した場合に発生します。npmやyarnが同じJSON構造を変更するため、重複する編集がJSON構文を壊すコンフリクトマーカーを生成します。

よくあるコンフリクトパターン

バージョンの衝突は、2つのブランチが同じ依存関係を異なるバージョンに更新した場合に発生します:

<<<<<<< HEAD
  "react": "^18.2.0",
=======
  "react": "^18.3.0",
>>>>>>> feature/upgrade-deps

新しい依存関係のコンフリクトは、両方のブランチがアルファベット順リストの同じ位置付近にエントリを追加した場合に発生します:

<<<<<<< HEAD
  "lodash": "^4.17.21",
  "luxon": "^3.4.0",
=======
  "lodash": "^4.17.21",
  "moment": "^2.30.0",
>>>>>>> feature/add-dates

解決アプローチ

バージョンの衝突では、既知の破壊的変更がない限り、一般的にAccept Theirs(新しいバージョン)を選択します。新しい依存関係の追加では、通常Accept Bothが正しい解決法です — 両方のブランチのパッケージすべてが必要です。ただし、マージ後の末尾のカンマや重複エントリに注意してください。

解決後の検証

コンフリクト解決後は、必ずnpm installまたはyarn installを実行してロックファイルを再生成し、JSONフォーマッターでJSONが有効であることを確認してください。

ユースケース

チームの2人の開発者が別々のfeatureブランチで新しいnpmパッケージを追加しました。2番目のブランチをマージすると、package.jsonのdependenciesセクションでGitがコンフリクトを報告します。

試してみる — Git Conflict Resolver

フルツールを開く