Skip to main content

マージ競合について

マージコンフリクトは、競合するコミットを持つブランチをマージしようとしたときに生じるもので、最終のマージにどちらの変更を取り入れるかを Git が判断するのに手助けが必要になります。

この記事で

Git がブランチ間の差異を自動的に解決してマージできる場合もあります。 通常、変更は異なる行にあったり、さらには異なるファイルにあったりするので、コンピュータにとってマージの理解がシンプルになります。 一方、Git が自力では差異を解決できず、あなたの介入が必要となることもあります。 しばしば、人々が同じファイルの同じ行に異なる変更をした場合や、ある人が編集したファイルを他の人が削除していた場合にマージコンフリクトが生じます。

          GitHubでプルリクエストをマージする前に、すべてのマージ競合を解決する必要があります。 pull request 中の比較ブランチとベース ブランチ間でマージ競合がある場合、 **[pull request のマージ]** ボタンの上に、競合する変更を持つファイルのリストが表示されます。 
          **[Merge pull request]** ボタンは、比較ブランチとベースブランチ間のすべての競合が解決されるまで、非アクティブになっています。

マージ競合の解決

マージコンフリクトを解決するには、競合しているファイルを手作業で編集し、最終のマージに残したい変更を選択しなければなりません。 マージコンフリクトを解決するにはいくつかの方法があります。

  • マージの競合が競合する行の変更によって発生する場合 (たとえば、Git リポジトリ内の異なるブランチで同じファイルの同じ行に異なる変更を加えた場合など)、競合エディターを使用して GitHub で解決できます。 詳しくは、「GitHubでのマージ競合の解決」をご覧ください。

  • 他のすべての種類のマージ競合の場合は、リポジトリのローカルクローンでマージ競合を解決し、GitHubのブランチに変更をプッシュする必要があります。 コマンド ラインや GitHub Desktop などのツールを使用して、変更をプッシュできます。 詳しくは、「コマンド ラインを使用してマージ コンフリクトを解決する」をご覧ください。

  • どの種類のマージ競合でも、Copilot クラウドエージェントにアクセスでき、リポジトリで有効になっている場合は、マージボックスでCopilotで修正をクリックすると、Copilotが自動的に競合を解決します。 Copilot では、競合する変更を分析し、競合を解消し、ビルド、テスト、リンターが問題なく通過することを確認します。 詳しくは、「Copilot からの出力を確認する」をご覧ください。

コマンド ラインでマージの競合が発生した場合、コンピューター上でマージの競合をローカルで解決するまで、ローカルの変更を GitHub にプッシュすることはできません。 マージコンフリクトのあるコマンドライン上のブランチをマージしようとすると、エラーメッセージが返されます。 詳しくは、「コマンド ラインを使用してマージ コンフリクトを解決する」をご覧ください。

$ git merge BRANCH-NAME
> Auto-merging styleguide.md
> CONFLICT (content): Merge conflict in styleguide.md
> Automatic merge failed; fix conflicts and then commit the result

参考資料