マージの競合を解決する

プル リクエストを作成すると、Bitbucket は更新されたソースと対象の元のコードとの比較を自動的に行います。対象のコードにほかのユーザーも変更を行っていた場合、マージを試行した際に、競合がある旨の通知が表示されます。

マージの競合がある場合、プル リクエストで [マージ] ボタンをクリックしてマージすうrことはできません。競合を解決するには、変更をローカル リポジトリにプルして、修正します。 

Git ブランチの競合を解消する

以降の説明は、Git リポジトリの 2 つのブランチ間の競合に対応する手順です。次のプレースホルダーが使用されます。

  • フォークされたリポジトリのディレクトリ: <repo_directory>

  • 宛先ブランチ: <destination_branch>

  • ソース ブランチ: <feature_branch>

  • 解決済みの競合があるファイル: <filename>

詳細を展開

  1. リポジトリのディレクトリに移動します。

    1 $ cd ~/<repo_directory>

    たとえば、リポジトリ名が "my-repository" の場合、結果は次のようになります。

    1 2 computer:$ cd ~/my-repository computer:my-repository emmap$
  2. リポジトリの最新のバージョンを Bitbucket からプルします。

    1 $ git pull
  3. ソース ブランチをチェックアウトします。

    1 $ git checkout <feature_branch>
  4. 宛先ブランチをソース ブランチにプルします。この時点では、宛先ブランチをプルすると、それをソースとマージできるかの試行が行われ、すべての競合が検出されます。

    1 $ git pull origin <destination_branch>

    たとえば、宛先ブランチが "main" の場合、結果は次のようになります。

    1 2 3 4 5 6 computer:my-repository emmap$ git pull origin main * branch main -> FETCH_HEAD Auto-merging team_contact_info.txt CONFLICT (content): Merge conflict in team_contact_info.txt Automatic merge failed; fix conflicts and then commit the result.

    競合がある 2 つのブランチをローカルでマージすると、エディターでファイルを開いたときに競合のマーカーが表示されます。

  5. ファイルを開いて競合を解決します。これを行うには、コマンド ラインを使用するか、ファイルに移動します。

  6. 次の操作を行って競合を解消します。

    • Git によって追加された変更指定を削除する

    • 内容を修正する

    • ファイルを保存する

  7. 変更を追加、コミットします。

    1 2 $ git add <filename> $ git commit -m'commit message'
  8. 変更をリモートにプッシュします。

    1 git push origin <feature_branch>

プル リクエストを確認すると、プル リクエストは引き続きオープンで、マージの競合は表示されなくなっていることがわかります。

Git フォークの競合を解消する

次の手順では、フォークされたリポジトリと元の Git リポジトリとの間の競合を解決する手順について説明します。次のプレースホルダーが使用されます。

  • フォークされたリポジトリのディレクトリ: <repo_directory>

  • 元のリポジトリの URL: <original_repo_URL>

  • 解決済みの競合があるファイル: <filename>

  • フォークされたリポジトリの宛先ブランチ:  <destination_branch>

ここでは、フォークされたリポジトリの競合を、元のリポジトリから更新をプルすることで解決する手順について説明します。フォークされたリポジトリを元のリポジトリにプルして元のリポジトリで競合を解決し、プッシュ時にプル リクエストが自動的にマージされるようにすることもできます。

  1. フォークされたリポジトリのディレクトリに移動します。

    1 $ cd ~/<repo_directory>

    たとえば、リポジトリ名が "my-repository" の場合、結果は次のようになります。

    1 2 computer:$ cd ~/my-repository computer:my-repository$
  2. フォークされたリポジトリでほかのユーザーが作業していた場合、Bitbucket からリポジトリの最新バージョンを取得していることを確認します。

    1 $ git pull

     

  3. フォークされたリポジトリとマージするために、宛先リポジトリをローカル リポジトリにプルします。

    1. リポジトリで URL をコピーします。

    2. コマンド ラインで、git pull とリポジトリ URL を入力します。

      1 $ git pull <original_repo_URL>

      結果は次のようになります。

      1 2 3 4 5 6 7 8 9 10 11 computer:my-repository emmap$ git pull git@bitbucket.org:user/myteamquotes.git remote: Counting objects: 219, done. remote: Compressing objects: 100% (219/219), done. remote: Total 219 (delta 137), reused 0 (delta 0) Receiving objects: 100% (219/219), 565.11 KiB | 382.00 KiB/s, done. Resolving deltas: 100% (137/137), completed with 2 local objects. From bitbucket.org:tutorials/tutorials.git.bitbucket.org * branch HEAD -> FETCH_HEAD Auto-merging editme.html CONFLICT (content): Merge conflict in editme.html Automatic merge failed; fix conflicts and then commit the result.
  4. ファイルを開いて競合を解決します。これを行うには、コマンド ラインを使用するか、ファイルに移動します。

  5. 次の操作を行って競合を解消します。

    • Git によって追加された変更指定を削除する

    • 内容を修正する

    • ファイルを保存する

  6. 変更を追加、コミットします。

    1 2 $ git add <filename> $ git commit -m'commit message'
  7. 変更を宛先リポジトリにプッシュします。

    1 $ git push origin <destination_branch>

プル リクエストを確認すると、プル リクエストは引き続きオープンで、マージの競合は表示されなくなっていることがわかります。

さらにヘルプが必要ですか?

アトラシアン コミュニティをご利用ください。