マージの競合を解決する

このページの内容

アトラシアンでは現在、Bitbucket のプル リクエスト エクスペリエンスの更新を行っています。このため、現在、コンテンツの競合のみが表示される場合があります。現在すべての種類の競合の表示に取り組んでいます。

個別のプル リクエストですべての競合タイプをすぐに利用したい場合、右側のサイドバーの [フィードバック] カードから新しいビューを一時的に無効化できます。

Bitbucket の新しいプル リクエストをお試しください。

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

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

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

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

  • The directory to the forked repository as <repo_directory>
  • The destination branch as <destination_branch>
  • The source branch as <feature_branch>
  • The file with resolved conflicts as <filename>
詳細を展開
  1. リポジトリのディレクトリに移動します。

    $ cd ~/<repo_directory>

    For example, if your repository name is my-repository, the result might look something like this:

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

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

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

    $ git pull origin <destination_branch>

    For example, if your destination branch is master, the result will look something like this:

    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 リポジトリとの間の競合を解決する手順について説明します。次のプレースホルダーが使用されます。

  • The directory to the forked repository as <repo_directory>
  • The URL of the original repository as <original_repo_URL>
  • The file with resolved conflicts as <filename>
  • The destination branch of the forked repository as <destination_branch>

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

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

    $ cd ~/<repo_directory>

    For example, if your repository name is my-repository, the result might look something like this:

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

    $ git pull


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

    1. リポジトリで URL をコピーします。
    2. Enter the repository URL with git pull at the command line:

      $ 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] をクリックします。

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

最終更新日 2018 年 9 月 24 日

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

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