

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS CodeCommit リポジトリ内のプルリクエストの競合を解決する
<a name="how-to-resolve-conflict-pull-request"></a>

プルリクエストに競合があるためにマージできない場合、つぎのいずれかの方法でこの競合の解決を試みることができます。
+ ローカルコンピューターで、**git diff** コマンドを使用して 2 つのブランチ間の競合を見つけ、解決するために変更を加えます。また、別のツールや他のソフトウェアを使用して差異を見つけて解決を試みることもできます。満足できる解決方法を実行したら、解決した競合が含まれる変更がある送信元のブランチをプッシュして、プルリクエストを更新できます。**git diff** および **git difftool** についての詳細は、Git ドキュメントを参照してください。
+ コンソールでは、[**Resolve conflicts (競合の解決)**] を選択できます。これにより、プレーンテキストエディタが開き、**git diff** コマンドに類似する方法で競合が表示されます。競合が含まれるファイルごとに手動で競合を確認し、変更を加えたら、変更されたものでプルリクエストを更新します。
+ AWS CLI では、AWS CLI を使用して競合のマージについての情報を取得し、マージをテストするために非参照のマージコミットを作成できます。

**Topics**
+ [プルリクエストの競合を解決する (コンソール)](#how-to-resolve-conflict-pull-request-console)
+ [プルリクエスト内の競合を解決する (AWS CLI)](#how-to-resolve-conflict-pull-request-cli)

## プルリクエストの競合を解決する (コンソール)
<a name="how-to-resolve-conflict-pull-request-console"></a>

CodeCommit コンソールを使用して、CodeCommit リポジトリ内のプルリクエストにおける競合を解決できます。

1. [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) で CodeCommit コンソールを開きます。

1. **リポジトリ**で、リポジトリの名前を選択します。

1. ナビゲーションペインで、[**プルリクエスト**] を選択します。

1. デフォルトでは、すべてのオープンプルリクエストが一覧表示されます。マージしたいけれど、競合があるオープンプルリクエストを選択します。

1. プルリクエストで [**Resolve conflicts**] を選択します。このオプションは、プルリクエストがマージできるようになる前に競合を解決する必要がある場合のみ表示されます。  
![プルリクエストがマージできるようになる前に解決する必要がある競合があることを示すプルリクエスト。](http://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/images/codecommit-pull-request-resolve-conflicts.png)

1. 解決する必要がある競合がある各ファイルをリスト化した競合解決ウィンドウが開きます。リストの各ファイルを選択して競合を確認し、すべての競合が解決されるまで必要な変更を加えます。  
![まだ解決されていない競合があるファイルを示す競合解決エディタ。](http://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/images/codecommit-pull-request-resolve.png)
   + 送信元のファイルコンテンツあるいは送信先のファイルコンテンツを使用するかを選択でき、また、ファイルがバイナリファイルではない場合には手動でファイルのコンテンツを編集して必要な変更のみが含まれるようにできます。スタンダード git diff マーカーは、ファイルの送信先ブランチ (HEAD) と送信元ブランチ間の競合を示すために使用されます。
   + ファイルがバイナリファイル、Git サブモジュールの場合、またはファイルあるいはフォルダの名前の競合がある場合、競合を解決するために送信元のファイルあるいは送信先のファイルを使用するかを選択する必要があります。CodeCommit コンソールでバイナリファイルを表示あるいは編集することはできません。
   + ファイルモードの競合がある場合、送信元ファイルのファイルモードと送信先ファイルのファイルモードのどちらかを選択することで、解決するためのオプションが表示されます。
   + ファイルの変更を破棄して競合状態に戻すには、[**Reset file (ファイルのリセット)**] を選択します。これにより、異なる方法で競合を解決できます。

1. 変更に満足したら、[**Update pull request (プルリクエストの更新)**] を選択します。
**注記**  
変更を使用してプルリクエストを正常に更新する前に、すべてのファイルですべての競合を解決する必要があります。

1. プルリクエストは、変更を使用して更新され、マージ可能になります。マージページが表示されます。この時点でプルリクエストをマージするか、またはプルリクエストのリストに戻るかを選択できます。

## プルリクエスト内の競合を解決する (AWS CLI)
<a name="how-to-resolve-conflict-pull-request-cli"></a>

CodeCommit で AWS CLI コマンドを使用するには、AWS CLI をインストールします。詳細については、「[コマンドラインリファレンス](cmd-ref.md)」を参照してください。

いずれの AWS CLI コマンドも単一でプルリクエスト内の競合を解決して、このリクエストをマージすることを許可しません。ただし、個別のコマンドを使用すると、競合の検出、これらの解決の試行、およびプルリクエストがマージ可能かどうかのテストを行うことができます。次を使用できます。
+ **get-merge-options** を使用して、どのマージオプションが 2 つのコミット識別子間のマージに使用できるかを検出します。
+ **get-merge-conflicts** を使用して、2 つのコミット識別子間のマージにおけるマージ競合があるファイルのリストを返します。
+ **batch-describe-merge-conflicts** を使用して、指定するマージ戦略を使用した 2 つのコミット間のマージにおけるファイル内のすべてのマージ競合についての情報を取得します。
+ **describe-merge-conflicts** を使用して、指定するマージ戦略を使用した 2 つのコミット間の特定のファイルにおけるマージ競合に関する詳細を取得します。
+ **create-unreferenced-merge-commit** を使用して、指定するマージ戦略を使用した 2 つのコミット識別子をマージする結果をテストします。

1. <a name="get-merge-options"></a>2 つのコミット識別子間でのマージに使用できるマージオプションを判断するためには、次を指定して **get-merge-options** コマンドを実行します。
   + マージの送信元のコミット識別子 (**--source-commit-specifier** オプションを指定)。
   + マージの送信先のコミット識別子 (**--destination-commit-specifier** オプションを指定)。
   + レポジトリの名前 (**--repository-name** オプションを指定)。
   + (オプション) 使用する競合解決戦略 (**--conflict-resolution-strategy** オプションを指定)。
   + (オプション) すべての競合についての詳細度レベル (**--conflict-detail-level** オプションを指定)。

    例えば、{{bugfix-1234}} という名前の送信元ブランチを {{MyDemoRepo}} という名前のリポジトリ内で {{main}} という名前の送信先ブランチにマージするために使用できるマージ戦略を判断するためには、次のようにします。

   ```
   aws codecommit get-merge-options --source-commit-specifier {{bugfix-1234}} --destination-commit-specifier {{main}} --repository-name {{MyDemoRepo}}
   ```

   このコマンドが正常に実行されると、次のような出力が生成されます。

   ```
   {
       "mergeOptions": [
           "FAST_FORWARD_MERGE",
           "SQUASH_MERGE",
           "THREE_WAY_MERGE"
       ],
       "sourceCommitId": "d49940adEXAMPLE",
       "destinationCommitId": "86958e0aEXAMPLE",
       "baseCommitId": "86958e0aEXAMPLE"
   }
   ```

1. <a name="get-merge-conflict"></a>2 つのコミット識別子間のマージのマージ競合が含まれるファイルのリストを取得するには、次を指定して **get-merge-conflicts** コマンドを実行します。
   + マージの送信元のコミット識別子 (**--source-commit-specifier** オプションを指定)。
   + マージの送信先のコミット識別子 (**--destination-commit-specifier** オプションを指定)。
   + レポジトリの名前 (**--repository-name** オプションを指定)。
   + 使用するマージオプション (**--merge-option** オプションを指定)。
   + (オプション) すべての競合についての詳細度レベル (**--conflict-detail-level** オプションを指定)。
   + (オプション) 使用する競合解決戦略 (**--conflict-resolution-strategy** オプションを指定)。
   + (オプション) 返す競合があるファイルの最大数 (**--max-conflict-files** オプションを指定)。

   例えば、MyDemoRepo という名前のリポジトリで 3 方向マージ戦略を使用した、feature-randomizationfeature という名前の送信元ブランチと main という名前の送信先ブランチ間のマージにおける競合があるファイルのリストを取得するには、次のようにします。

   ```
   aws codecommit get-merge-conflicts --source-commit-specifier feature-randomizationfeature --destination-commit-specifier main --merge-option THREE_WAY_MERGE --repository-name MyDemoRepo
   ```

   このコマンドが正常に実行されると、次のような出力が生成されます。

   ```
   {
       "mergeable": false,
       "destinationCommitId": "86958e0aEXAMPLE",
       "sourceCommitId": "6ccd57fdEXAMPLE",
       "baseCommitId": "767b6958EXAMPLE",
       "conflictMetadataList": [
           {
               "filePath": "readme.md",
               "fileSizes": {
                   "source": 139,
                   "destination": 230,
                   "base": 85
               },
               "fileModes": {
                   "source": "NORMAL",
                   "destination": "NORMAL",
                   "base": "NORMAL"
               },
               "objectTypes": {
                   "source": "FILE",
                   "destination": "FILE",
                   "base": "FILE"
               },
               "numberOfConflicts": 1,
               "isBinaryFile": {
                   "source": false,
                   "destination": false,
                   "base": false
               },
               "contentConflict": true,
               "fileModeConflict": false,
               "objectTypeConflict": false,
               "mergeOperations": {
                   "source": "M",
                   "destination": "M"
               }
           }
       ]
   }
   ```

1. <a name="batch-describe-merge-conflicts"></a>2 つのコミット識別子間のマージにおいて、すべてのファイルあるいはファイルのサブセットないのマージ競合についての情報を取得するには、**batch-describe-merge-conflicts** コマンドを実行します。
   + マージの送信元のコミット識別子 (**--source-commit-specifier** オプションを指定)。
   + マージの送信先のコミット識別子 (**--destination-commit-specifier** オプションを指定)。
   + 使用するマージオプション (**--merge-option** オプションを指定)。
   + レポジトリの名前 (**--repository-name** オプションを指定)。
   + (オプション) 使用する競合解決戦略 (**--conflict-resolution-strategy** オプションを指定)。
   + (オプション) すべての競合についての詳細度レベル (**--conflict-detail-level** オプションを指定)。
   + (オプション) 返されるマージハンクの最大数 (**--max-merge-hunks** オプションを指定)。
   + (オプション) 返す競合があるファイルの最大数 (**--max-conflict-files** オプションを指定)。
   + (オプション) 競合を説明するために使用されるターゲットファイルのパス (**--file-paths** オプションを指定)。

    例えば、{{feature-randomizationfeature}} という名前の送信元のブランチと {{main}} という名前の送信先ブランチを {{MyDemoRepo}} という名前のリポジトリで {{THREE\_WAY\_MERGE}} 戦略を使用してマージするときのマージ競合を判断するためには、次のようにします。

   ```
   aws codecommit batch-describe-merge-conflicts --source-commit-specifier {{feature-randomizationfeature}} --destination-commit-specifier {{main}} --merge-option {{THREE_WAY_MERGE}} --repository-name {{MyDemoRepo}}
   ```

   このコマンドが正常に実行されると、次のような出力が生成されます。

   ```
   {
       "conflicts": [
           {
               "conflictMetadata": {
                   "filePath": "readme.md",
                   "fileSizes": {
                       "source": 139,
                       "destination": 230,
                       "base": 85
                   },
                   "fileModes": {
                       "source": "NORMAL",
                       "destination": "NORMAL",
                       "base": "NORMAL"
                   },
                   "objectTypes": {
                       "source": "FILE",
                       "destination": "FILE",
                       "base": "FILE"
                   },
                   "numberOfConflicts": 1,
                   "isBinaryFile": {
                       "source": false,
                       "destination": false,
                       "base": false
                   },
                   "contentConflict": true,
                   "fileModeConflict": false,
                   "objectTypeConflict": false,
                   "mergeOperations": {
                       "source": "M",
                       "destination": "M"
                   }
               },
               "mergeHunks": [
                   {
                       "isConflict": true,
                       "source": {
                           "startLine": 0,
                           "endLine": 3,
                           "hunkContent": "VGhpcyBpEXAMPLE=="
                       },
                       "destination": {
                           "startLine": 0,
                           "endLine": 1,
                           "hunkContent": "VXNlIHRoEXAMPLE="
                       }
                   }
               ]
           }
       ],
       "errors": [],
       "destinationCommitId": "86958e0aEXAMPLE",
       "sourceCommitId": "6ccd57fdEXAMPLE",
       "baseCommitId": "767b6958EXAMPLE"
   }
   ```

1. <a name="describe-merge-conflicts"></a>2 つのコミット識別子間のマージの特定のファイルにおけるマージ競合についての詳細を取得するには、次を指定して **describe-merge-conflicts** コマンドを実行します。
   + マージの送信元のコミット識別子 (**--source-commit-specifier** オプションを指定)。
   + マージの送信先のコミット識別子 (**--destination-commit-specifier** オプションを指定)。
   + 使用するマージオプション (**--merge-option** オプションを指定)。
   + 競合を説明するために使用するターゲットファイルのパス (**--file-path** オプションを指定)。
   + レポジトリの名前 (**--repository-name** オプションを指定)。
   + (オプション) 使用する競合解決戦略 (**--conflict-resolution-strategy** オプションを指定)。
   + (オプション) すべての競合についての詳細度レベル (**--conflict-detail-level** オプションを指定)。
   + (オプション) 返されるマージハンクの最大数 (**--max-merge-hunks** オプションを指定)。
   + (オプション) 返す競合があるファイルの最大数 (**--max-conflict-files** オプションを指定)。

   例えば、{{readme.md}} という名前のファイルで {{feature-randomizationfeature}} という名前の送信元ブランチと {{main}} という名前の送信先ブランチでの {{MyDemoRepo}} という名前のリポジトリ内の {{THREE\_WAY\_MERGE}} 戦略を使用したマージ競合を判断するには、次のようにします。

   ```
   aws codecommit describe-merge-conflicts --source-commit-specifier {{feature-randomizationfeature}} --destination-commit-specifier {{main}} --merge-option {{THREE_WAY_MERGE}} --file-path {{readme.md}} --repository-name {{MyDemoRepo}}
   ```

   このコマンドが正常に実行されると、次のような出力が生成されます。

   ```
   {
       "conflictMetadata": {
           "filePath": "readme.md",
           "fileSizes": {
               "source": 139,
               "destination": 230,
               "base": 85
           },
           "fileModes": {
               "source": "NORMAL",
               "destination": "NORMAL",
               "base": "NORMAL"
           },
           "objectTypes": {
               "source": "FILE",
               "destination": "FILE",
               "base": "FILE"
           },
           "numberOfConflicts": 1,
           "isBinaryFile": {
               "source": false,
               "destination": false,
               "base": false
           },
           "contentConflict": true,
           "fileModeConflict": false,
           "objectTypeConflict": false,
           "mergeOperations": {
               "source": "M",
               "destination": "M"
           }
       },
       "mergeHunks": [
           {
               "isConflict": true,
               "source": {
                   "startLine": 0,
                   "endLine": 3,
                   "hunkContent": "VGhpcyBpEXAMPLE=="
               },
               "destination": {
                   "startLine": 0,
                   "endLine": 1,
                   "hunkContent": "VXNlIHRoEXAMPLE="
               }
           }
       ],
       "destinationCommitId": "86958e0aEXAMPLE",
       "sourceCommitId": "6ccd57fdEXAMPLE",
       "baseCommitId": "767b69580EXAMPLE"
   }
   ```

1. <a name="create-unreferenced-merge-commit"></a>2 つのコミット識別子をマージした結果を表す非参照のコミットを作成するには、次を指定して **create-unreferenced-merge-commit** コマンドを実行します。
   + マージの送信元のコミット識別子 (**--source-commit-specifier** オプションを指定)。
   + マージの送信先のコミット識別子 (**--destination-commit-specifier** オプションを指定)。
   + 使用するマージオプション (**--merge-option** オプションを指定)。
   + レポジトリの名前 (**--repository-name** オプションを指定)。
   + (オプション) 使用する競合解決戦略 (**--conflict-resolution-strategy** オプションを指定)。
   + (オプション) すべての競合についての詳細度レベル (**--conflict-detail-level** オプションを指定)。
   + (オプション) 含めるコミットメッセージ (**--commit-message** オプションを指定)。
   + (オプション) コミットに使用する名前 (**--name** オプションを指定)。
   + (オプション) コミットに使用する E メールアドレス (**--email** オプションを指定)。
   + (オプション) 空のフォルダを保持するかどうか (**--keep-empty-folders** オプションを指定)。

    例えば、{{bugfix-1234}} という名前の送信元のブランチと {{main}} という名前の送信先ブランチを {{MyDemoRepo}} という名前のリポジトリで ACCEPT\_SOURCE 戦略を使用してマージするときのマージ競合を判断するためには、次のようにします。

   ```
   aws codecommit create-unreferenced-merge-commit --source-commit-specifier {{bugfix-1234}} --destination-commit-specifier {{main}} --merge-option THREE_WAY_MERGE --repository-name {{MyDemoRepo}} --name "Maria Garcia" --email "maria_garcia@example.com" --commit-message "Testing the results of this merge."
   ```

   このコマンドが正常に実行されると、次のような出力が生成されます。

   ```
   {
       "commitId": "4f178133EXAMPLE",
       "treeId": "389765daEXAMPLE"
   }
   ```