AWS CodeCommit リポジトリでプルリクエストをマージする - AWS CodeCommit

AWS CodeCommit リポジトリでプルリクエストをマージする

コードがレビューされ、プルリクエストのすべての承認ルール(存在する場合)が満たされたら、次のいずれかの方法でプルリクエストをマージできます。

  • コンソールを使用して、利用できるいずれかのマージ戦略を使用して送信元ブランチを送信先ブランチにマージすることができます。また、これはプルリクエストを終了できます。また、コンソールでマージの競合を解決することもできます。プルリクエストがマージ可能かどうか、または競合を解決する必要があるかどうかを示すメッセージがコンソールに表示されます。すべての競合が解決され、[Merge (マージ)] を選択すると、選択したマージ戦略を使用してマージが実行されます。早送りは、Git のデフォルトのオプションであるデフォルトのマージ戦略です。送信元ブランチと送信先ブランチ内のコードの状態によってはこの戦略を利用できないことがありますが、スカッシュや 3 方向などの他のオプションを使用できる可能性があります。

  • AWS CLI を使用して、早送り、スカッシュ、または 3 方向のマージ戦略を使用してプルリクエストをマージおよびクローズできます。

  • ローカルコンピュータで、git merge コマンドを使用して、ソースブランチを送信先ブランチにマージしてから、マージしたコードを送信先ブランチにプッシュすることができます。このアプローチには、慎重に検討する必要がある欠点があります。プルリクエストの承認ルールの要件が満たされているかどうかにかかわらず、プルリクエストをマージし、これらのコントロールを回避します。送信先ブランチをマージしてプッシュすると、早送りマージ戦略を利用してプルリクエストをマージする場合に、プルリクエストを自動的にクローズします。この方法の利点の 1 つは、git merge コマンドで、CodeCommit コンソールで使用できないマージオプションまたは戦略を選択できることです。git merge とマージオプションの詳細については、「git-merge」または Git ドキュメントを参照してください。

CodeCommit は、プルリクエストの送信元ブランチまたは送信先ブランチのいずれかが削除された場合、プルリクエストを自動的にクローズします。

プルリクエストをマージする (コンソール)

CodeCommit コンソールを使用して、CodeCommit リポジトリにプルリクエストをマージできます。プルリクエストの状態が [Merged (マージ済み)] に変更されると、これはオープンプルリクエストのリストに表示されなくなります。マージされたプルリクエストはクローズ済みに分類されます。これを [Open (オープン)] に戻すことはできませんが、ユーザーはこの変更に対して引き続きコメントでき、コメントに対して返信できます。プルリクエストがマージまたはクローズされると、そのプルリクエストを承認、承認取り消し、プルリクエストに適用された承認ルールを上書きすることはできません。

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

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

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

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

  5. プルリクエストで、[Approvals (承認)] を選択します。承認者のリストを確認し、すべての承認ルール(存在する場合)が条件を満たしていることを確認します。1 つ以上の承認ルールのステータスが [Rule not satisfied (ルールが満たされていません)] の場合、プルリクエストをマージできません。プルリクエストを誰も承認していない場合は、マージするか、承認を待機するかを検討します。

    注記

    プルリクエストの承認ルールが作成されている場合は、編集または削除してマージのブロックを解除できます。承認ルールテンプレートを使用して作成された承認ルールは、編集または削除できません。要件を上書きすることのみを選択できます。詳細については、「プルリクエストの承認ルールの上書き」を参照してください。

    
                        条件が満たされていない承認ルールと空の承認者リストを示すプルリクエスト。
  6. [Merge (マージ)] を選択します。

  7. プルリクエストで、使用可能なマージ方法のいずれかを選択します。適用できないマージ戦略は、グレー表示されます。利用可能なマージ戦略がない場合、CodeCommit コンソールで競合を手動で解決するか、または Git クライアントをローカルで使用して解決することができます。詳細については、「AWS CodeCommit リポジトリ内のプルリクエストの競合を解決する」を参照してください。

    
                        CodeCommit コンソールでのマージで利用できるマージ戦略を示すプルリクエスト。
    • 早送りマージは、送信元ブランチの最新コミットに送信先のブランチへのリファレンスを転送します。これは、利用可能な場合の Git のデフォルトの動作です。マージコミットは作成されませんが、送信元ブランチからのすべてのコミット履歴は送信先ブランチで発生していたかのように保持されます。早送りマージは、マージコミットが作成されないため、送信先ブランチの履歴のコミットビジュアライザービューにブランチマージとして表示されません。送信元ブランチのヒントが送信先ブランチのヒントに早送りされます。

    • スカッシュマージによって送信元ブランチ内の変更を含む 1 つのコミットが作成され、この単一のスカッシュ済みコミットが送信先ブランチに適用されます。デフォルトでは、このスカッシュコミットへのコミットメッセージには送信元ブランチ内の変更におけるすべてのコミットメッセージが含まれています。ブランチの変更における個別のコミット履歴は一切保持されません。これによってリポジトリ履歴の簡素化に役立ち、また、送信先ブランチの履歴のコミットビューではマージのグラフ表示が保持されます。

    • 3 方向マージは送信先ブランチのマージにマージコミットを作成しますが、送信元ブランチで行われた個別のコミットも送信先ブランチの履歴の一部として保持します。これは、リポジトリへの変更の完全な履歴を保持することに役立ちます。

  8. スカッシュあるいは 3 方向のマージ戦略を選択する場合、自動生成されるコミットメッセージを確認して、情報を変更する必要に応じてこれを編集します。コミット履歴に名前および E メールアドレスを追加します。

  9. (オプション)必要に応じて、送信元ブランチをマージの一部として削除するオプションの選択を解除します。デフォルトでは、プルリクエストがマージされたときにソースブランチを削除します。

  10. [Merge pull request (プルリクエストのマージ)] を選択してマージを完了します。

プルリクエストをマージする (AWS CLI)

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

AWS CLI を使用して CodeCommit リポジトリでプルリクエストをマージするには

  1. プルリクエストのすべての承認ルールが満たされ、マージする準備ができているかどうかを評価するには、以下を指定して、evaluate-pull-request-approval-rules コマンドを実行します。

    • プルリクエストの ID (--pull-request-id オプションを指定)。

    • プルリクエストのリビジョン ID (--revision-id option) を使用。プルリクエストの現在のリビジョン ID を取得するには、get-pull-request コマンドを使用します。

    たとえば、ID が 27 で、リビジョン ID が 9f29d167EXAMPLE を持つプルリクエストの承認ルールの状態を評価するには、次のようにします。

    aws codecommit evaluate-pull-request-approval-rules --pull-request-id 27 --revision-id 9f29d167EXAMPLE

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

    { "evaluation": { "approved": false, "approvalRulesNotSatisfied": [ "Require two approved approvers" ], "overridden": false, "approvalRulesSatisfied": [] } }
    注記

    この出力は、承認ルールの要件が満たされていないため、プルリクエストがマージ可能でないことを示します。このプルリクエストをマージするには、ルールの条件を満たすためにレビュー担当者に承認してもらいます。アクセス許可とルールの作成方法によっては、ルールを編集、上書き、または削除できる場合もあります。詳細については、「プルリクエストのレビュー」、「プルリクエストの承認ルールの上書き」、および「プルリクエストの承認ルールを編集または削除する」を参照してください。

  2. 早送りマージ戦略を使用してプルリクエストをマージしてクローズするには、次を指定して merge-pull-request-by-fast-forward コマンドを実行します。

    • プルリクエストの ID (--pull-request-id オプションを指定)。

    • ソースブランチのチップの完全なコミット ID (--source-commit-id オプションを指定)。

    • レポジトリの名前 (--repository-name オプションを指定)。

    例えば、MyDemoRepo という名前のリポジトリで、ID が 47、ソースコミット ID が 99132ab0EXAMPLE のプルリクエストをマージしてクローズするには、以下の操作を行います。

    aws codecommit merge-pull-request-by-fast-forward --pull-request-id 47 --source-commit-id 99132ab0EXAMPLE --repository-name MyDemoRepo

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

    { "pullRequest": { "approvalRules": [ { "approvalRuleContent": "{\"Version\": \"2018-11-08\",\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 1,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}", "approvalRuleId": "dd8b17fe-EXAMPLE", "approvalRuleName": "I want one approver for this pull request", "creationDate": 1571356106.936, "lastModifiedDate": 571356106.936, "lastModifiedUser": "arn:aws:iam::123456789012:user/Mary_Major", "ruleContentSha256": "4711b576EXAMPLE" } ], "authorArn": "arn:aws:iam::123456789012:user/Li_Juan", "clientRequestToken": "", "creationDate": 1508530823.142, "description": "Review the latest changes and updates to the global variables", "lastActivityDate": 1508887223.155, "pullRequestId": "47", "pullRequestStatus": "CLOSED", "pullRequestTargets": [ { "destinationCommit": "9f31c968EXAMPLE", "destinationReference": "refs/heads/main", "mergeMetadata": { "isMerged": true, "mergedBy": "arn:aws:iam::123456789012:user/Mary_Major" }, "repositoryName": "MyDemoRepo", "sourceCommit": "99132ab0EXAMPLE", "sourceReference": "refs/heads/variables-branch" } ], "title": "Consolidation of global variables" } }
  3. スカッシュマージ戦略を使用してプルリクエストをマージしてクローズするには、次を指定して merge-pull-request-by-squash コマンドを実行します。

    • プルリクエストの ID (--pull-request-id オプションを指定)。

    • ソースブランチのチップの完全なコミット ID (--source-commit-id オプションを指定)。

    • レポジトリの名前 (--repository-name オプションを指定)。

    • 使用する競合の詳細のレベル (--conflict-detail-level オプションを指定)。指定しない場合、デフォルトの FILE_LEVEL が使用されます。

    • 使用する競合の解決戦略 (--conflict-resolution-strategy オプションを指定)。指定しない場合、このデフォルトは NONE になり、競合を手動で解決する必要があります。

    • 含めるコミットメッセージ (--commit-message オプションを指定)。

    • コミットに使用する名前 (--author-name オプションを指定)。

    • コミットに使用する E メールアドレス (--email オプションを指定)。

    • 空のフォルダを保持するかどうか (--keep-empty-folders オプションを指定)。

    次の例では、MyDemoRepo という名前のリポジトリで、ID が 47、ソースコミット ID が 99132ab0EXAMPLE のプルリクエストをマージしてクローズします。これは、LINE_LEVEL の競合の詳細と ACCEPT_SOURCE の競合解決戦略を使用します

    aws codecommit merge-pull-request-by-squash --pull-request-id 47 --source-commit-id 99132ab0EXAMPLE --repository-name MyDemoRepo --conflict-detail-level LINE_LEVEL --conflict-resolution-strategy ACCEPT_SOURCE --author-name "Jorge Souza" --email "jorge_souza@example.com" --commit-message "Merging pull request 47 by squash and accepting source in merge conflicts"

    正常に実行されると、このコマンドは早送りによるマージと同じ種類の出力を行います。出力は次のようになります。

    { "pullRequest": { "approvalRules": [ { "approvalRuleContent": "{\"Version\": \"2018-11-08\",\"DestinationReferences\": [\"refs/heads/main\"],\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 2,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}", "approvalRuleId": "dd8b17fe-EXAMPLE", "approvalRuleName": "2-approver-rule-for-main", "creationDate": 1571356106.936, "lastModifiedDate": 571356106.936, "lastModifiedUser": "arn:aws:iam::123456789012:user/Mary_Major", "originApprovalRuleTemplate": { "approvalRuleTemplateId": "dd8b17fe-EXAMPLE", "approvalRuleTemplateName": "2-approver-rule-for-main" }, "ruleContentSha256": "4711b576EXAMPLE" } ], "authorArn": "arn:aws:iam::123456789012:user/Li_Juan", "clientRequestToken": "", "creationDate": 1508530823.142, "description": "Review the latest changes and updates to the global variables", "lastActivityDate": 1508887223.155, "pullRequestId": "47", "pullRequestStatus": "CLOSED", "pullRequestTargets": [ { "destinationCommit": "9f31c968EXAMPLE", "destinationReference": "refs/heads/main", "mergeMetadata": { "isMerged": true, "mergedBy": "arn:aws:iam::123456789012:user/Mary_Major" }, "repositoryName": "MyDemoRepo", "sourceCommit": "99132ab0EXAMPLE", "sourceReference": "refs/heads/variables-branch" } ], "title": "Consolidation of global variables" } }
  4. 3 方向のマージ戦略を使用してプルリクエストをマージしてクローズするには、次を指定して merge-pull-request-by-three-way コマンドを実行します。

    • プルリクエストの ID (--pull-request-id オプションを指定)。

    • ソースブランチのチップの完全なコミット ID (--source-commit-id オプションを指定)。

    • レポジトリの名前 (--repository-name オプションを指定)。

    • 使用する競合の詳細のレベル (--conflict-detail-level オプションを指定)。指定しない場合、デフォルトの FILE_LEVEL が使用されます。

    • 使用する競合の解決戦略 (--conflict-resolution-strategy オプションを指定)。指定しない場合、このデフォルトは NONE になり、競合を手動で解決する必要があります。

    • 含めるコミットメッセージ (--commit-message オプションを指定)。

    • コミットに使用する名前 (--author-name オプションを指定)。

    • コミットに使用する E メールアドレス (--email オプションを指定)。

    • 空のフォルダを保持するかどうか (--keep-empty-folders オプションを指定)。

    次の例では、MyDemoRepo という名前のリポジトリで、ID が 47、ソースコミット ID が 99132ab0EXAMPLE のプルリクエストをマージしてクローズします。これは、競合の詳細と競合解決戦略のデフォルトのオプションを使用します。

    aws codecommit merge-pull-request-by-three-way --pull-request-id 47 --source-commit-id 99132ab0EXAMPLE --repository-name MyDemoRepo --author-name "Maria Garcia" --email "maria_garcia@example.com" --commit-message "Merging pull request 47 by three-way with default options"

    正常に実行されると、このコマンドは早送りによるマージと同じ種類の次のような出力を行います。

    { "pullRequest": { "approvalRules": [ { "approvalRuleContent": "{\"Version\": \"2018-11-08\",\"DestinationReferences\": [\"refs/heads/main\"],\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 2,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}", "approvalRuleId": "dd8b17fe-EXAMPLE", "approvalRuleName": "2-approver-rule-for-main", "creationDate": 1571356106.936, "lastModifiedDate": 571356106.936, "lastModifiedUser": "arn:aws:iam::123456789012:user/Mary_Major", "originApprovalRuleTemplate": { "approvalRuleTemplateId": "dd8b17fe-EXAMPLE", "approvalRuleTemplateName": "2-approver-rule-for-main" }, "ruleContentSha256": "4711b576EXAMPLE" } ], "authorArn": "arn:aws:iam::123456789012:user/Li_Juan", "clientRequestToken": "", "creationDate": 1508530823.142, "description": "Review the latest changes and updates to the global variables", "lastActivityDate": 1508887223.155, "pullRequestId": "47", "pullRequestStatus": "CLOSED", "pullRequestTargets": [ { "destinationCommit": "9f31c968EXAMPLE", "destinationReference": "refs/heads/main", "mergeMetadata": { "isMerged": true, "mergedBy": "arn:aws:iam::123456789012:user/Mary_Major" }, "repositoryName": "MyDemoRepo", "sourceCommit": "99132ab0EXAMPLE", "sourceReference": "refs/heads/variables-branch" } ], "title": "Consolidation of global variables" } }