マージの競合を解決する

お困りですか?

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

コミュニティに質問

robotsnoindex


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

When you have merge conflicts, you can't click the Merge button from the pull request to merge. To resolve these conflicts, you pull the changes to your local repository and fix them there. 

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

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

  • フォークされたリポジトリのディレクトリ: <repo_directory>
  • 宛先ブランチ: <destination_branch>
  • ソース ブランチ: <feature_branch>
  • 解決済みの競合があるファイル: <filename>
詳細を展開
  1. リポジトリのディレクトリに移動します。

    $ cd ~/<repo_directory>

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

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

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

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

    $ git pull origin <destination_branch>

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

    computer:my-repository emmap$ git pull origin master
     * branch            master     -> 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. ファイルを開いて競合を解消します。これを行うには、コマンド ラインを使用するか、ファイルに移動します。
    ファイルは次のようになります。

    A. HEAD ブランチの変更の開始点。この例では、HEAD はマージ先のアクティブなブランチを表します。
    B.  アクティブなブランチの変更の終了点かつ、非アクティブなブランチの変更の開始点。
    C.  非アクティブなブランチの変更の終了点。

  6. 次の操作を行って競合を解消します。
    1. Git が追加した変更記号を削除します (上述のスクリーンショットのAB、および C)。
    2. 内容を修正します。
    3. ファイルを保存します。
      結果は次のようになります。
  7. 変更を追加、コミットします。

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

    git push origin <feature_branch>

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

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

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

  • フォークされたリポジトリのディレクトリ: <repo_directory>
  • 元のリポジトリの URL: <original_repo_URL>
  • 解決済みの競合があるファイル: <filename>
  • フォークされたリポジトリの宛先ブランチ:  <destination_branch>

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

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

    $ cd ~/<repo_directory>

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

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

    $ git pull


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

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

      $ git pull <original_repo_URL>

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

      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. ファイルを開いて競合を解決します。これを行うには、コマンド ラインを使用するか、ファイルに移動します。
    ファイルは次のようになります。

    A. HEAD ブランチの変更の開始点。この例では、HEAD はマージ先のアクティブなブランチを表します。 
    B.  アクティブなブランチの変更の終了点かつ、非アクティブなブランチの変更の開始点。
    C.  非アクティブなブランチの変更の終了点。

  5. 次の操作を行って競合を解消します。
    1. Git が追加した変更記号を削除します (上述のスクリーンショットのAB、および C)。
    2. 内容を修正します。
    3. ファイルを保存します。
      結果は次のようになります。
  6. 変更を追加、コミットします。

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

    $ git push origin <destination_branch>

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

Mercurial ブランチ間の競合を解決する

次の手順では、Sourcetree を使用して 2 つのブランチ間で競合を解決する方法について説明します。Mercurial リポジトリの競合を解決するには、マージ用のツールをインストールして使用する必要があります。Sourcetree をインストールしていない場合、インストールします。

詳細を展開
  1. Sourceree でリポジトリを開きます。

  2. リポジトリで、ソース ブランチにいることを確認します。[ブランチ] に、チェックアウトしたブランチが太字で表示されます。ソース ブランチがチェックアウトされていない場合、そのブランチ名をダブルクリックします。

  3. [プル] ボタンをクリックして、Bitbucket からリポジトリの最新バージョンをプルします。[開く] ダイアログでは既定設定のまま [OK] をクリックします。

  4. 競合を含む 2 つのブランチをマージします。
    1. ソース ブランチで最新のコミットをクリックします。
    2. マージ ボタンをクリックします。
    3. 宛先ブランチで最新のコミットをクリックします。
    4. ダイアログで [OK] をクリックします。
  5. ソースをプルすると、宛先リポジトリとのマージの試行が行われ、すべての競合が検出されるため、[マージの解消] ダイアログが表示されます。OK をクリックします。

  6. ファイルを任意のエディタで開いて競合を解決します。
    ファイルは次のようになります。

    A. アクティブなブランチの変更の開始点。
    B. アクティブなブランチの変更の終了点かつ、非アクティブなブランチの変更の開始点。
    C. 非アクティブなブランチの変更の終了点。

  7. 次の操作を行って競合を解消します。
    1. Git が追加した変更記号を削除します (上述のスクリーンショットのAB、および C)。
    2. 内容を修正します。
    3. ファイルを保存します。
      結果は次のようになります。
  8. Sourcetree に戻り、競合があるファイルを選択します。[アクション] で [競合の解決] を選択し、[解決済みとしてマーク] を選択します。ダイアログで [OK] をクリックします。
  9. [コミット] ボタンをクリックし、コミット メッセージを入力して、[コミット] をクリックします。
  10. [プッシュ] ボタンをクリックし、選択した内容を確認して [OK] をクリックします。

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

Mercurial フォークで競合を解決する

次の手順では、Sourcetree を使用して、フォークされたリポジトリと元のリポジトリの間の競合を解決する方法について説明します。Mercurial リポジトリの競合を解決するには、マージ用のツールをインストールして使用する必要があります。Sourcetree をインストールしていない場合、インストールします。

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

詳細を展開
  1. Sourcetree で、フォークされたリポジトリを開きます。

  2. フォークされたリポジトリで [プル] ボタンをクリックして、Bitbucket から宛先ブランチの最新バージョンを取得します。[開く] ダイアログでは既定オプションのまま [OK] をクリックします。

  3. 元のリポジトリの最新バージョンをプルするには、[プル] ボタンを再度クリックします。開いているダイアログで次の操作を行います。
    1. [このリポジトリをプル] で [カスタム] を選択し、元のリポジトリの URL を入力します。
    2. OK をクリックします。
  4. ソースをプルすると、宛先リポジトリとのマージの試行が行われ、すべての競合が検出されるため、[マージの解消] ダイアログが表示されます。OK をクリックします。

  5. ファイルを任意のエディタで開いて競合を解消します。

    ファイルは次のようになります。

    A. アクティブなブランチの変更の開始点。
    B. アクティブなブランチの変更の終了点かつ、非アクティブなブランチの変更の開始点。
    C. 非アクティブなブランチの変更の終了点。

  6. 次の操作を行って競合を解消します。
    1. Git が追加した変更記号を削除します (上述のスクリーンショットのAB、および C)。
    2. 内容を修正します。
    3. ファイルを保存します。
      結果は次のようになります。
  7. Sourcetree に戻り、[履歴] から [未コミットの変更] 行を選択します。
  8. [アクション] で [競合の解消] を選択し、[解決済みとしてマーク] を選択します。ダイアログで [OK] をクリックします。
  9. [コミット] ボタンをクリックし、コミット メッセージを入力して、[コミット] をクリックします。
  10. [プッシュ] ボタンをクリックし、選択した内容を確認して [OK] をクリックします。

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

最終更新日 2020 年 6 月 24 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.