Skip to main content

マージ競合について

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

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

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

マージ競合の解決

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

  • マージコンフリクトが、Git リポジトリ中の異なるブランチ上で同じファイルの同じ行に異なる変更をしたといったような、競合する行の変更から生じた場合には、コンフリクトエディタを使って GitHub Enterprise Server 上で解決できます。 詳しくは、「GitHub でのマージ コンフリクトを解決する」を参照してください。
  • 他のすべての種類のマージコンフリクトについては、リポジトリのローカルクローン中でマージコンフリクトを解決し、変更を GitHub Enterprise Server 上のブランチにプッシュしなければなりません。 コマンド ラインを使用するか、GitHub Desktop などのツールを使用し、変更をプッシュできます。 詳細については、「コマンド ラインを使用してマージ コンフリクトを解決する」を参照してください。

コマンドライン上にマージコンフリクトがあるなら、自分のコンピュータ上でローカルにマージコンフリクトを解決するまでは、ローカルの変更を GitHub Enterprise Server にプッシュできません。 マージコンフリクトのあるコマンドライン上のブランチをマージしようとすると、エラーメッセージが返されます。 詳しくは、「コマンド ラインを使用してマージ コンフリクトを解決する」を参照してください。

$ 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

参考資料