ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。
記事のバージョン: GitHub.com

コマンド ラインを使用してマージ コンフリクトを解決する

コマンド ラインとテキスト エディターを使用することで、マージ コンフリクトを解決できます。

マージコンフリクトは、競合している変更がファイルの同じ行に行われるとき、またはある人があるファイルを編集し別の人が同じファイルを削除すると発生します。 詳細は「マージコンフリクトについて」を参照してください。

参考: GitHub でコンフリクト エディターを使用することで、Pull Request の一部であるブランチの間で競合している行変更のマージ コンフリクトを解消できます。 詳細については、「GitHub でマージコンフリクトを解決する」を参照してください。

競合している行変更のマージ コンフリクト

競合している行変更により発生するマージ コンフリクトを解決するには、新しいコミットにどの変更を組み込むかをいくつかの別のブランチから選択する必要があります。

たとえば、あなたともう一人が両方とも、同じ Git リポジトリの別のブランチにあるファイル styleguide.md で同じ行を編集した場合、これらのブランチをマージしようとするとマージ コンフリクト エラーが発生します。 これらのブランチをマージする前に、新たなコミットでこのマージ コンフリクトを解決する必要があります。

  1. ターミナルターミナルGit Bashターミナル を開いてください。

  2. マージ コンフリクトが発生しているローカルの Git リポジトリに移動します。

    cd REPOSITORY-NAME
  3. マージ コンフリクトの影響を受けるファイルのリストを生成します。 この例では、ファイル styleguide.md にマージコンフリクトが発生しています。

    $ git status
    > # On branch branch-b
    > # You have unmerged paths.
    > #   (fix conflicts and run "git commit")
    > #
    > # Unmerged paths:
    > #   (use "git add ..." to mark resolution)
    > #
    > # both modified:      styleguide.md
    > #
    > no changes added to commit (use "git add" and/or "git commit -a")
  4. Atom などのお気に入りのテキスト エディターを開き、マージ コンフリクトが発生しているファイルに移動します。

  5. ファイル内でマージ コンフリクトの始まりを確認するには、ファイル内のコンフリクト マーカー <<<<<<< を検索します。 テキスト エディターでファイルを開くと、行の後に HEAD またはベース ブランチからの変更である <<<<<<< HEAD が目につきます。 次に、======= が見えます。これは、自分の変更と他のブランチでの変更を区別するものであり、その後に >>>>>>> BRANCH-NAME が続きます。 この例では、ある人が HEAD (ベース) ブランチに "open an issue" と書き込み、別の人が compare ブランチ (branch-a) に "ask your question in IRC" と書き込みました。

If you have questions, please <<<<<<< HEAD

open an issue

ask your question in IRC.

branch-a 1. 自分のブランチの変更だけを保持するか、他のブランチの変更だけを保持するか、あるいは両方の変更を含む新しい変更を作成するかを決定してください。コンフリクトマーカーの <<<<<<<=======>>>>>>> を削除し、最終のマージに含めたい変更を作成してください。 この例では、両方の変更が最終的なマージに取り込まれています:

質問がある場合は、Issue を開くか、緊急の場合は IRC チャネルにてお問い合わせください。
  1. 変更を追加またはステージングします。

    $ git add .
  2. 変更をコメントを付けてコミットします。

    $ git commit -m "Resolved merge conflict by incorporating both suggestions."

これでコマンドラインでブランチをマージできます。 また、GitHub で変更をリモート リポジトリにプッシュすることや、Pull Request で変更をマージすることができます。

削除したファイルのマージコンフリクト

ある人があるブランチでファイルを削除し、別の人が同じファイルを編集するなどの、ファイルへの変更が競合していることにより発生するマージコンフリクトを解決するには、削除したファイルを削除するか保持するかを新しいコミットで選択する必要があります。

たとえば、あなたが README.md などのファイルを編集した場合、別の人が同じ Git リポジトリ内の別のブランチにある同じファイルを削除したならば、これらのブランチをマージしようとした際にマージコンフリクト エラーが発生します。 これらのブランチをマージする前に、新たなコミットでこのマージコンフリクトを解決する必要があります。

  1. ターミナルターミナルGit Bashターミナル を開いてください。

  2. マージ コンフリクトが発生しているローカルの Git リポジトリに移動します。

    cd REPOSITORY-NAME
  3. マージ コンフリクトの影響を受けるファイルのリストを生成します。 この例では、ファイル README.md にマージコンフリクトが発生しています。

    $ git status
    > # On branch master
    > # Your branch and 'origin/master' have diverged,
    > # and have 1 and 2 different commits each, respectively.
    > #  (use "git pull" to merge the remote branch into yours)
    > # You have unmerged paths.
    > #  (fix conflicts and run "git commit")
    > #
    > # Unmerged paths:
    > #  (use "git add/rm ..." as appropriate to mark resolution)
    > #
    > # deleted by us:   README.md
    > #
    > # no changes added to commit (use "git add" and/or "git commit -a")
  4. Atom などのお気に入りのテキスト エディターを開き、マージ コンフリクトが発生しているファイルに移動します。

  5. 削除したファイルを保存するかどうかを決めます。 削除したファイルに行った最新の変更をテキスト エディターで確認することをお勧めします。

    削除したファイルをリポジトリに追加して戻すには:

    $ git add README.md

このファイルをリポジトリから削除するには:

$ git rm README.md
> README.md: needs merge
> rm 'README.md'
  1. 変更をコメントを付けてコミットします。

    $ git commit -m "Resolved merge conflict by keeping README.md file."
    > [branch-d 6f89e49] Merge branch 'branch-c' into branch-d

これでコマンド ラインでブランチをマージできます。 また、GitHub で変更をリモート リポジトリにプッシュすることや、Pull Request で変更をマージすることができます。

参考リンク

担当者にお尋ねください

探しているものが見つからなかったでしょうか?

弊社にお問い合わせください