コマンド ラインを使用してマージ コンフリクトを解決する
コマンド ラインとテキスト エディターを使用することで、マージ コンフリクトを解決できます。
ここには以下の内容があります:
マージコンフリクトは、競合している変更がファイルの同じ行に行われるとき、またはある人があるファイルを編集し別の人が同じファイルを削除すると発生します。 詳細は「マージコンフリクトについて」を参照してください。
参考: GitHub Enterprise でコンフリクト エディターを使用することで、Pull Request の一部であるブランチの間で競合している行変更のマージ コンフリクトを解消できます。 詳細については、「GitHub でマージコンフリクトを解決する」を参照してください。
競合している行変更のマージ コンフリクト
競合している行変更により発生するマージ コンフリクトを解決するには、新しいコミットにどの変更を組み込むかをいくつかの別のブランチから選択する必要があります。
たとえば、あなたともう一人が両方とも、同じ Git リポジトリの別のブランチにあるファイル styleguide.md で同じ行を編集した場合、これらのブランチをマージしようとするとマージ コンフリクト エラーが発生します。 これらのブランチをマージする前に、新たなコミットでこのマージ コンフリクトを解決する必要があります。
-
ターミナルターミナルGit Bashを開いてください。
-
マージ コンフリクトが発生しているローカルの Git リポジトリに移動します。
cd REPOSITORY-NAME
-
マージ コンフリクトの影響を受けるファイルのリストを生成します。 In this example, the file styleguide.md has a merge conflict.
$ 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") -
Atom などのお気に入りのテキスト エディターを開き、マージ コンフリクトが発生しているファイルに移動します。
-
To see the beginning of the merge conflict in your file, search the file for the conflict marker
<<<<<<<
. When you open the file in your text editor, you'll see the changes from the HEAD or base branch after the line<<<<<<< HEAD
. Next, you'll see=======
, which divides your changes from the changes in the other branch, followed by>>>>>>> BRANCH-NAME
. In this example, one person wrote "open an issue" in the base or HEAD branch and another person wrote "ask your question in IRC" in the compare branch orbranch-a
.If you have questions, please <<<<<<< HEAD open an issue ======= ask your question in IRC. >>>>>>> branch-a
-
あなたのブランチの変更だけを保持したいか、他のブランチの変更だけを保持したいか、あるいは両方のブランチからの変更を取り入れられる新しい変更を作成するかを決めてください。 コンフリクトマーカーの
<<<<<<<
、=======
、>>>>>>>
を削除して、最終のマージに入れたい変更を作成してください。 In this example, both changes are incorporated into the final merge:質問がある場合は、Issue を開くか、緊急の場合は IRC チャネルにてお問い合わせください。
-
変更を追加またはステージングします。
$ git add .
-
変更をコメントを付けてコミットします。
$ git commit -m "Resolved merge conflict by incorporating both suggestions."
これでコマンドラインでブランチをマージできます。 また、GitHub Enterprise で変更をリモート リポジトリにプッシュすることや、Pull Request で変更をマージすることができます。
削除したファイルのマージコンフリクト
ある人があるブランチでファイルを削除し、別の人が同じファイルを編集するなどの、ファイルへの変更が競合していることにより発生するマージコンフリクトを解決するには、削除したファイルを削除するか保持するかを新しいコミットで選択する必要があります。
たとえば、あなたが README.md などのファイルを編集した場合、別の人が同じ Git リポジトリ内の別のブランチにある同じファイルを削除したならば、これらのブランチをマージしようとした際にマージコンフリクト エラーが発生します。 これらのブランチをマージする前に、新たなコミットでこのマージ コンフリクトを解決する必要があります。
-
ターミナルターミナルGit Bashを開いてください。
-
マージ コンフリクトが発生しているローカルの Git リポジトリに移動します。
cd REPOSITORY-NAME
-
マージ コンフリクトの影響を受けるファイルのリストを生成します。 この例では、ファイル 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") -
Atom などのお気に入りのテキスト エディターを開き、マージ コンフリクトが発生しているファイルに移動します。
-
削除したファイルを保存するかどうかを決めます。 削除したファイルに行った最新の変更をテキスト エディターで確認することをお勧めします。
削除したファイルをリポジトリに追加して戻すには:
$ git add README.md
このファイルをリポジトリから削除するには:
$ git rm README.md > README.md: needs merge > rm 'README.md'
-
変更をコメントを付けてコミットします。
$ git commit -m "Resolved merge conflict by keeping README.md file." > [branch-d 6f89e49] Merge branch 'branch-c' into branch-d
これでコマンドラインでブランチをマージできます。 また、GitHub Enterprise で変更をリモート リポジトリにプッシュすることや、Pull Request で変更をマージすることができます。