

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 处理 AWS CodeCommit 仓库中的拉取请求
<a name="pull-requests"></a>

拉取请求是您和其他存储库用户用于审查、评论和合并分支间的代码更改的主要方式。您可以使用拉取请求与他人协作审查代码更改中次要的更改或修复、主要功能增加或已发布软件的新版本。以下是一个适用于拉取请求的可能的工作流程：

Li Juan 是一位开发名为 repo 的开发者 MyDemoRepo，他想为即将推出的产品版本开发一项新功能。为了将自己的工作与可用于生产的代码分开，她在默认分支之外创建了一个分支并将其命名。*feature-randomizationfeature*她编写代码、进行提交并将新功能代码推送到此分支中。在将更改合并到默认分支中之前，她希望其他存储库用户审查代码质量。为执行此操作，她创建了一个拉取请求。拉取请求包含她的工作分支与她打算合并更改的代码分支 (在本示例中为默认分支) 之间的比较。她还可以创建审批规则，要求指定数量的用户对其拉取请求进行审批。她甚至可以指定用户审批池。其他用户会审查她的代码和更改，同时添加评论和建议。她可能会多次根据评论更改代码并更新其工作分支。每次她将更改推送到该分支时，她的更改都会合并到拉取请求中 CodeCommit。当拉取请求处于打开状态时，她还可能并入在预期目标分支中所做的更改，以使用户可以确保他们在上下文中审查所有提议的更改。在她及其审核人感到满意并且满足了审批规则条件（如果有）时，她或一位审核人可以合并代码并关闭拉取请求。

![\[创建拉取请求\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-create.png)


拉取请求需要两个分支：源分支 (包含要审查的代码) 和目标分支 (被审查的代码将合并到其中)。源分支包含 AFTER 提交，该提交包含要合并到目标分支中的更改。目标分支包含 BEFORE 提交，表示代码在拉取请求分支合并到目标分支中之前的状态。合并策略的选择会影响 CodeCommit 控制台中源分支和目标分支之间如何合并提交的细节。有关中合并策略的更多信息 CodeCommit，请参阅[合并拉取请求（控制台）](how-to-merge-pull-request.md#how-to-merge-pull-request-console)。

![\[拉取请求的源分支和目标分支（显示之前提交和之后提交之间的关系）\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-concepts.png)


拉取请求显示创建拉取请求时源分支的提示与目标分支中的最新提交之间的差异，以便于用户查看并评论更改。通过将更改提交和推送到源分支，可以更新拉取请求以响应评论。

![\[在拉取请求中添加对行的评论。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-comment.png)


当代码经过审核并满足审批规则要求（如果有）时，您可以通过以下几种方式关闭拉取请求：
+ 本地合并分支并推送更改。如果使用快进合并策略，这会自动关闭请求，并且不会产生任何合并冲突。
+ 使用 AWS CodeCommit 控制台关闭拉取请求而不进行合并，解决合并中的冲突，或者，如果没有冲突，则使用一种可用的合并策略关闭并合并分支。
+ 使用 AWS CLI。

在创建拉取请求之前，请：
+ 确保您已将要审核的代码更改提交并推送至分支（源分支）。
+ 为存储库设置通知，这样其他用户可以收到有关拉取请求及其更改的通知。(虽然此步骤是可选的，但我们建议您这样做。)
+ 创建审批规则模板并将其与存储库关联，以便为拉取请求自动创建审批规则，从而帮助确保代码质量。有关更多信息，请参阅 [使用审批规则模板](approval-rule-templates.md)。

如果已为 Amazon Web Services 账户中的存储库用户设置 IAM 用户，则拉取请求会更有效。可以更轻松地确定哪个用户发布了什么注释。另一个优点是 IAM 用户可以使用 Git 凭证访问存储库。有关更多信息，请参阅 [步骤 1：的初始配置 CodeCommit](setting-up-gc.md#setting-up-gc-account)。您可以对其他类型的用户（包括联合访问用户）使用拉取请求。

有关在中使用存储库其他方面的信息 CodeCommit，请参阅[使用存储库](repositories.md)[使用审批规则模板](approval-rule-templates.md)、[使用文件](files.md)、[使用提交](commits.md)、[使用分支](branches.md)、和[使用用户首选项](user-preferences.md)。

**Topics**
+ [创建拉取请求](how-to-create-pull-request.md)
+ [为拉取请求创建审批规则](how-to-create-pull-request-approval-rule.md)
+ [在 AWS CodeCommit 仓库中查看拉取请求](how-to-view-pull-request.md)
+ [审核拉取请求](how-to-review-pull-request.md)
+ [更新拉取请求](how-to-update-pull-request.md)
+ [编辑或删除拉取请求的审批规则](how-to-edit-delete-pull-request-approval-rule.md)
+ [覆盖拉取请求的审批规则](how-to-override-approval-rules.md)
+ [合并 AWS CodeCommit 存储库中的拉取请求](how-to-merge-pull-request.md)
+ [解决 AWS CodeCommit 存储库中的拉取请求中的冲突](how-to-resolve-conflict-pull-request.md)
+ [关闭 AWS CodeCommit 仓库中的拉取请求](how-to-close-pull-request.md)

# 创建拉取请求
<a name="how-to-create-pull-request"></a>

创建拉取请求有助于在您将代码更改合并到另一分支之前，让其他用户查看和审核您所做的更改。首先，您需要为代码更改创建一个分支，这称作拉取请求的源分支。在将这些更改提交并推送到存储库之后，您可以创建拉取请求将该分支 (源分支) 的内容与要在拉取请求关闭后将更改合并到的分支 (目的分支) 进行比较。

您可以使用 AWS CodeCommit 控制台或 AWS CLI 为存储库创建拉取请求。

**Topics**
+ [创建拉取请求（控制台）](#how-to-create-pull-request-console)
+ [创建拉取请求 (AWS CLI)](#how-to-create-pull-request-cli)

## 创建拉取请求（控制台）
<a name="how-to-create-pull-request-console"></a>

您可以使用 CodeCommit 控制台在 CodeCommit 存储库中创建拉取请求。如果您的存储库[配置了通知](how-to-repository-email.md)，则订阅用户将在您创建拉取请求时收到电子邮件。

1. 打开 CodeCommit 控制台：[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home)。

1. 在**存储库**中，选择要在其中创建拉取请求的存储库的名称。

1. 在导航窗格中，选择**拉取请求**。
**提示**  
您也可以从**分支**和**代码**创建拉取请求。

1. 选择**创建拉取请求**。  
![\[在 CodeCommit 控制台中从“拉取请求”页面创建拉取请求。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-view.png)

1. 在 **Create pull request** 中，在 **Source** 中选择包含要审核的更改的分支。

1. 在 **Destination (目标)** 中，选择要在拉取请求关闭后将代码更改合并到的分支。

1. 选择 **Compare**。将对两个分支进行比较，并显示它们之间的差异。还会执行分析以确定在拉取请求关闭时两个分支能否自动合并。

1. 审核比较详细信息和更改以确保拉取请求包含您要审核的更改和提交。如果不包含，请调整您的源分支和目标分支选择，然后再次选择 **Compare**。

1. 在您对拉取请求的比较结果感到满意以后，在**标题**中为此审核输入一个简短的描述性标题。此标题显示在存储库的拉取请求列表中。

1. （可选）在**描述**中，输入有关此审核的详细信息以及对审核者有用的任何其他信息。

1. 选择**创建**。  
![\[创建拉取请求\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-create.png)

拉取请求将显示在存储库的拉取请求列表中。如果您[配置了通知](how-to-repository-email.md)，则该 Amazon SNS 主题的订阅者会收到电子邮件，通知他们新创建了拉取请求。

## 创建拉取请求 (AWS CLI)
<a name="how-to-create-pull-request-cli"></a>

要使用 AWS CLI 命令操作 CodeCommit，请安装 AWS CLI。有关更多信息，请参阅 [命令行参考](cmd-ref.md)。

**使用 AWS CLI 在 CodeCommit 存储库中创建拉取请求**
+ 运行 **create-pull-request** 命令，并指定：
  + 拉取请求的名称（使用 **--title** 选项）。
  + 拉取请求的描述（使用 **--description** 选项）。
  + **create-pull-request** 命令的目标列表，包括：
    + 将在其中创建拉取请求的 CodeCommit 存储库的名称(使用 **repositoryName** 属性)。
    + 包含您要审核的代码更改的分支的名称，也称为源分支（使用 **sourceReference** 属性）。
    + （可选）如果您不想合并到默认分支，还需要提供要将代码更改合并到的分支（也称为目标分支）的名称（使用 **destinationReference** 属性）。
  + 客户端生成的唯一等幂令牌（使用 **--client-request-token** 选项）。

  此示例创建一个名为 *Pronunciation difficulty analyzer* 的拉取请求，其描述为 *Please review these changes by Tuesday*，并以 *jane-branch* 源分支为目标。拉取请求将合并到名为 `MyDemoRepo` 的 CodeCommit 存储库的默认分支 *main* 中：

  ```
  aws codecommit create-pull-request --title "Pronunciation difficulty analyzer" --description "Please review these changes by Tuesday" --client-request-token 123Example --targets repositoryName=MyDemoRepo,sourceReference=jane-branch 
  ```

# 为拉取请求创建审批规则
<a name="how-to-create-pull-request-approval-rule"></a>

为拉取请求创建审批规则，要求用户在将代码合并到目标分支之前对拉取请求进行审批，从而有助于确保代码的质量。您可以指定必须审批拉取请求的用户数量。您还可以为规则指定用户审批池。如果这样做，则只有这些用户的审批计入规则的所需审批数量。

**注意**  
您还可以创建审批规则模板，帮助您跨存储库自动创建要应用于每个拉取请求的审批规则。有关更多信息，请参阅 [使用审批规则模板](approval-rule-templates.md)。

您可以使用 AWS CodeCommit 控制台或为您的存储库创建批准规则。 AWS CLI 

**Topics**
+ [为拉取请求创建审批规则（控制台）](#how-to-create-pull-request-approval-rule-console)
+ [为拉取请求创建审批规则 (AWS CLI)](#how-to-create-pull-request-approval-rule-cli)

## 为拉取请求创建审批规则（控制台）
<a name="how-to-create-pull-request-approval-rule-console"></a>

您可以使用 CodeCommit 控制台为 CodeCommit 仓库中的拉取请求创建批准规则。

1. 在 [https://console.aws.amazon.com/codesuite/codemmit](https://console.aws.amazon.com/codesuite/codecommit/home) /home 打开 CodeCommit 控制台。

1. 在 **Repositories (存储库)** 中，选择要在其中为拉取请求创建审批规则的存储库的名称。

1. 在导航窗格中，选择**拉取请求**。

1. 从列表中选择要为其创建审批规则的拉取请求。您只能为处于打开状态的拉取请求创建审批规则。  
![\[CodeCommit 控制台中仓库的拉取请求列表。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-view.png)

1. 在拉取请求中，选择 **Approvals (审批)**，然后选择 **Create approval rule (创建审批规则)**。

1. 在 **Rule name (规则名称)** 中，为规则指定一个描述性名称，以便您知道其用途。例如，如果您希望拉取请求在合并之前，必须由两人对其进行审批，那么可以将该规则命名为 **Require two approvals before merge**。
**注意**  
审批规则在创建之后，其名称无法更改。

   在 **Number of approvals needed (需要的审批数量)** 中，输入所需的数量。默认 为 1。  
![\[为拉取请求创建审批规则\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-create-approval-rule.png)

1. （可选）如果您希望必须由特定用户组对拉取请求进行审批，那么可以在 **Approval rule members (审批规则成员)** 中，选择 **Add (添加)**。在 **Approver type (审批人类型)** 中，选择以下选项之一：
   + **IAM 用户名或代入的角色**：此选项会预先填入您用于登录的账户的 AWS 账户 ID，并且只需要一个名称。它可以用于 IAM 用户，以及名称与所提供名称相匹配的联合访问用户。这是一个非常强大的选项，提供了极大的灵活性。例如，如果您使用 Amazon Web Services 账户 123456789012 登录并选择了此选项，而且指定了 **Mary\$1Major**，那么以下所有用户都将计为来自该用户的审批：
     + 账户中的 IAM 用户 (`arn:aws:iam::123456789012:user/Mary_Major`)
     + 在 IAM 中标识为 Mary\$1Major 的联合用户 (`arn:aws:sts::123456789012:federated-user/Mary_Major`)

     除非包含通配符 (`*Mary_Major`)，否则此选项无法识别代入 **CodeCommitReview** 角色且角色会话名称为 Mary\$1Major (`arn:aws:sts::123456789012:assumed-role/CodeCommitReview/Mary_Major`) 的某人的活动会话。您还可以显式指定角色名称 (`CodeCommitReview/Mary_Major`)。
   + **完全限定的 ARN**：此选项允许您指定 IAM 用户或角色的完全限定 Amazon 资源名称 (ARN)。此选项还支持其他 AWS 服务（例如 AWS Lambda 和）使用的代入角色 AWS CodeBuild。对于代入的角色，ARN 格式应为 `arn:aws:sts::AccountID:assumed-role/RoleName`（适用于角色）和 `arn:aws:sts::AccountID:assumed-role/FunctionName`（适用于函数）。

   如果选择 **IAM 用户名或代入的角色**作为审批人类型，那么请在**值**中输入 IAM 用户或角色的名称，或者输入用户或角色的完全限定 ARN。再次选择 **Add (添加)** 可添加多个用户或角色，直到您已添加了其审批计入所需审批数量的所有用户或角色。

   这两种审批人类型都允许在其值中使用通配符 (\$1)。例如，如果选择 **IAM 用户名或代入的角色**选项，并且指定 **CodeCommitReview/\$1**，那么代入 **CodeCommitReview** 角色的所有用户都将计入审批池中。他们各自的角色会话名称将计入所需的审批人数量。按照此方法，Mary\$1Major 和 Li\$1Juan 在登录并代入 `CodeCommitReview` 角色时，都计为审批。有关 IAM ARNs、通配符和格式的更多信息，请参阅 [IAM 标识符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。
**注意**  
审批规则不支持跨账户审批。

1. 完成审批规则的配置之后，选择 **Submit (提交)**。

 

## 为拉取请求创建审批规则 (AWS CLI)
<a name="how-to-create-pull-request-approval-rule-cli"></a>

要将 AWS CLI 命令与一起使用 CodeCommit，请安装 AWS CLI。有关更多信息，请参阅 [命令行参考](cmd-ref.md)。

## 为 CodeCommit 仓库中的拉取请求创建批准规则

+ 运行 **create-pull-request-approval-rule** 命令，并指定：
  + 拉取请求的 ID（使用 **--id** 选项）。
  + 审批规则的名称（使用 **--approval-rule-name** 选项）。
  + 审批规则的内容（使用 **--approval-rule-content** 选项）。

  创建审批规则时，可以按照以下两种方式之一指定审批池中的审批人：
  + **CodeCommitApprovers**：此选项只需要一个亚马逊 Web Services 账户和资源。它可以用于 IAM 用户，以及名称与所提供资源名称相匹配的联合访问用户。这是一个非常强大的选项，提供了极大的灵活性。例如，如果指定 Amazon Web Services 账户 123456789012 和 **Mary\$1Major**，那么以下所有用户都将计为来自该用户的审批：
    + 账户中的 IAM 用户 (`arn:aws:iam::123456789012:user/Mary_Major`)
    + 在 IAM 中标识为 Mary\$1Major 的联合用户 (`arn:aws:sts::123456789012:federated-user/Mary_Major`)

    除非包含通配符 (`*Mary_Major`)，否则此选项无法识别代入 **CodeCommitReview** 角色且角色会话名称为 Mary\$1Major (`arn:aws:sts::123456789012:assumed-role/CodeCommitReview/Mary_Major`) 的某人的活动会话。
  + **完全限定的 ARN**：此选项允许您指定 IAM 用户或角色的完全限定 Amazon 资源名称 (ARN)。

  有关 IAM ARNs、通配符和格式的更多信息，请参阅 [IAM 标识符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。

  以下示例为 ID 为 `27` 的拉取请求创建名为 `Require two approved approvers` 的审批规则。该规则指定审批池中需要两个审批。该池包括访问 CodeCommit 并担任 `123456789012` Amazon Web Ser **CodeCommitReview** vices 账户角色的所有用户。还包括同一 Amazon Web Services 账户中的 IAM 用户或名为 `Nikhil_Jayashankar` 的联合用户：

  ```
  aws codecommit create-pull-request-approval-rule --pull-request-id 27 --approval-rule-name "Require two approved approvers" --approval-rule-content "{\"Version\": \"2018-11-08\",\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 2,\"ApprovalPoolMembers\": [\"CodeCommitApprovers:123456789012:Nikhil_Jayashankar\", \"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}"
  ```

# 在 AWS CodeCommit 仓库中查看拉取请求
<a name="how-to-view-pull-request"></a>

您可以使用 AWS CodeCommit 控制台或查看仓库的 AWS CLI 拉取请求。默认情况下，虽然您只会看到处于打开状态的拉取请求，但您可以更改筛选器以查看所有拉取请求、仅查看关闭的请求、仅查看您创建的拉取请求等。

**Topics**
+ [查看拉取请求（控制台）](#how-to-view-pull-request-console)
+ [查看拉取请求 (AWS CLI)](#how-to-view-pull-request-cli)

## 查看拉取请求（控制台）
<a name="how-to-view-pull-request-console"></a>

您可以使用 AWS CodeCommit 控制台查看 CodeCommit 仓库中的拉取请求列表。通过更改筛选器，可以更改列表显示，使其仅显示一组特定的拉取请求。例如，您可以查看您创建的状态为 **Open** 的拉取请求列表，也可以选择不同的筛选器并查看您创建的状态为 **Closed** 的拉取请求。

1. 在 [https://console.aws.amazon.com/codesuite/codemmit](https://console.aws.amazon.com/codesuite/codecommit/home) /home 打开 CodeCommit 控制台。

1. 在 **Repositories (存储库)** 中，选择要在其中查看拉取请求的存储库的名称。

1. 在导航窗格中，选择**拉取请求**。

1. 默认情况下，会显示所有处于打开状态的拉取请求的列表。  
![\[拉取请求显示在 AWS CodeCommit 控制台中。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-view-list.png)

1. 要更改显示筛选器，请从可用筛选器列表中选择：
   + **已打开的拉取请求**（默认）：显示状态为 **Open (打开)** 的所有拉取请求。
   + **All pull requests** (所有拉取请求)：显示所有拉取请求。
   + **Closed pull requests** (已关闭的拉取请求)：显示状态为 **Closed (关闭)** 的所有拉取请求。
   + **My pull requests (我的拉取请求)**：显示您创建的所有拉取请求，而不考虑状态。这不会显示您注释过或参与的评论。
   + **My open pull requests (我的打开的拉取请求)**：显示您创建的状态为 **Open (打开)** 的所有拉取请求。
   + **My closed pull requests (我的已关闭拉取请求)**：显示您创建的状态为 **Closed (已关闭)** 的所有拉取请求。

1. 在显示列表中找到要查看的拉取请求时，将其选中。

## 查看拉取请求 (AWS CLI)
<a name="how-to-view-pull-request-cli"></a>

要将 AWS CLI 命令与一起使用 CodeCommit，请安装 AWS CLI。有关更多信息，请参阅 [命令行参考](cmd-ref.md)。

按照以下步骤使用 AWS CLI 来查看 CodeCommit 存储库中的拉取请求。

1. 要查看存储库中的拉取请求列表，请运行 **list-pull-requests** 命令，并且指定：
   + 您要在其中查看拉取请求的 CodeCommit 存储库的名称（带**--repository-name**选项）。
   + （可选）拉取请求的状态（使用 **--pull-request-status** 选项）。
   + （可选）创建拉取请求的 IAM 用户的 Amazon 资源名称 (ARN)（使用 **--author-arn** 选项）。
   + （可选）可用于返回批量结果的枚举令牌（使用 **--next-token** 选项）。
   + （可选）对每个请求返回结果数的限制（使用 **--max-results** 选项）。

   例如，要列出由名为 ARN *arn:aws:iam::111111111111:user/Li\$1Juan* 且状态为 IAM 用户在名为的 CodeCommit 仓库*CLOSED*中创建的拉取请求：`MyDemoRepo`

   ```
   aws codecommit list-pull-requests --author-arn arn:aws:iam::111111111111:user/Li_Juan --pull-request-status CLOSED --repository-name MyDemoRepo 
   ```

   如果成功，该命令产生类似以下内容的输出：

   ```
   {
      "nextToken": "",
      "pullRequestIds": ["2","12","16","22","23","35","30","39","47"]
   }
   ```

   拉取请求 IDs 按最近活动的顺序显示。

1. 要查看某个拉取请求的详细信息，请运行带 **--pull-request-id** 选项的 **get-pull-request** 命令，并指定该拉取请求的 ID。例如，要查看 ID 为的拉取请求的相关信息*27*：

   ```
   aws codecommit get-pull-request --pull-request-id 27
   ```

   如果成功，该命令产生类似以下内容的输出：

   ```
   {
       "pullRequest": {
           "approvalRules": [
               {
                   "approvalRuleContent": "{\"Version\": \"2018-11-08\",\"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",
                   "ruleContentSha256": "4711b576EXAMPLE"
               }
           ],
           "lastActivityDate": 1562619583.565,
           "pullRequestTargets": [
               {
                   "sourceCommit": "ca45e279EXAMPLE",
                   "sourceReference": "refs/heads/bugfix-1234",
                   "mergeBase": "a99f5ddbEXAMPLE",
                   "destinationReference": "refs/heads/main",
                   "mergeMetadata": {
                       "isMerged": false
                   },
                   "destinationCommit": "2abfc6beEXAMPLE",
                   "repositoryName": "MyDemoRepo"
               }
           ],
           "revisionId": "e47def21EXAMPLE",
           "title": "Quick fix for bug 1234",
           "authorArn": "arn:aws:iam::123456789012:user/Nikhil_Jayashankar",
           "clientRequestToken": "d8d7612e-EXAMPLE",
           "creationDate": 1562619583.565,
           "pullRequestId": "27",
           "pullRequestStatus": "OPEN"
       }
   }
   ```

1. <a name="get-pull-request-approval-state"></a>要查看拉取请求的审批状态，请运行 **get-pull-request-approval-state** 命令，并指定：
   + 拉取请求的 ID（使用 **--pull-request-id** 选项）。
   + 拉取请求的修订 ID（使用 **--revision-id option)**）。您可以使用 [get-pull-request](#get-pull-request) 命令获取拉取请求的当前修订 ID。

   例如，要查看 ID 为、修订版 ID 为的*8*拉取请求的批准情况*9f29d167EXAMPLE*：

   ```
   aws codecommit get-pull-request-approval-state --pull-request-id 8 --revision-id 9f29d167EXAMPLE
   ```

   如果成功，该命令产生类似以下内容的输出：

   ```
   {
       "approvals": [
           {
               "userArn": "arn:aws:iam::123456789012:user/Mary_Major",
               "approvalState": "APPROVE"
           }
       ]
   }
   ```

1. 要查看某个拉取请求中的事件，请运行带 **--pull-request-id** 选项的 **describe-pull-request-events** 命令，并指定该拉取请求的 ID。例如，要查看 ID 为的拉取请求的事件*8*：

   ```
   aws codecommit describe-pull-request-events --pull-request-id 8
   ```

   如果成功，该命令产生类似以下内容的输出：

   ```
   {
       "pullRequestEvents": [
           {
               "pullRequestId": "8",
               "pullRequestEventType": "PULL_REQUEST_CREATED",
               "eventDate": 1510341779.53,
               "actor": "arn:aws:iam::111111111111:user/Zhang_Wei"
           },
           {
               "pullRequestStatusChangedEventMetadata": {
                   "pullRequestStatus": "CLOSED"
               },
               "pullRequestId": "8",
               "pullRequestEventType": "PULL_REQUEST_STATUS_CHANGED",
               "eventDate": 1510341930.72,
               "actor": "arn:aws:iam::111111111111:user/Jane_Doe"
           }
       ]
   }
   ```

1. 要查看拉取请求是否存在合并冲突，请运行 **get-merge-conflicts** 命令，并指定：
   +  CodeCommit 存储库的名称（带**--repository-name**选项）。
   + 要在合并评估中使用的变更源的分支、标签、HEAD 或其他完全限定的引用（使用 **--source-commit-specifier** 选项）。
   + 要在合并评估中使用的变更目标的分支、标签、HEAD 或其他完全限定的引用（使用 **--destination-commit-specifier** 选项）。
   + 要使用的合并选项（使用 **--merge-option** 选项） 

   例如，要查看名为的源分支的尖端与名为的存储库*main*中名为*my-feature-branch*的目标分支之间是否存在任何合并冲突`MyDemoRepo`：

   ```
   aws codecommit get-merge-conflicts --repository-name MyDemoRepo --source-commit-specifier my-feature-branch --destination-commit-specifier main --merge-option FAST_FORWARD_MERGE
   ```

   如果成功，该命令返回类似以下内容的输出：

   ```
   {
       "destinationCommitId": "fac04518EXAMPLE",
       "mergeable": false,
       "sourceCommitId": "16d097f03EXAMPLE"
   }
   ```

# 审核拉取请求
<a name="how-to-review-pull-request"></a>

您可以使用 AWS CodeCommit 控制台查看拉取请求中包含的更改。您可以向请求、文件和特定代码行添加评论。您还可以回复其他用户所做的评论。如果存储库已[配置通知](how-to-repository-email.md)，您将在用户回复您的评论或用户评论拉取请求时收到电子邮件。

您可以使用 AWS CLI 对拉取请求发表评论和回复评论。要查看更改，必须使用 CodeCommit 控制台、**git diff**命令或差异工具。

**Topics**
+ [审核拉取请求（控制台）](#how-to-review-pull-request-console)
+ [审核拉取请求 (AWS CLI)](#how-to-review-pull-request-cli)

## 审核拉取请求（控制台）
<a name="how-to-review-pull-request-console"></a>

您可以使用 CodeCommit 控制台查看 CodeCommit 存储库中的拉取请求。

1. 在 [https://console.aws.amazon.com/codesuite/codemmit](https://console.aws.amazon.com/codesuite/codecommit/home) /home 打开 CodeCommit 控制台。

1. 在**存储库**中，选择存储库的名称。

1. 在导航窗格中，选择**拉取请求**。

1. 默认情况下，会显示所有处于打开状态的拉取请求的列表。选择要审核的处于打开状态的拉取请求。  
![\[打开 CodeCommit 控制台中显示的拉取请求。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-view-list.png)
**注意**  
您可以对已关闭或已合并的拉取请求进行注释，但不能合并或重新打开该请求。

1. 在拉取请求中，选择 **Changes**。

1. 请执行以下操作之一：
   + 要为整个拉取请求添加一般注释，请在 **Comments on changes (更改注释)** 的 **New comment (新建注释)** 中，输入注释，然后选择 **Save (保存)**。您可以使用 [Markdown](https://docs.aws.amazon.com/general/latest/gr/aws-markdown.html)，也可以纯文本格式输入评论。  
![\[对拉取请求中更改的一般评论。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-commenting-changecomment.png)
   + 要向提交中的文件添加评论，请在 **Changes** 中找到该文件的名称。选择显示在文件名旁的注释图标 ![\[The comment bubble icon that that indicates that you can leave a comment on that line of code.\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-commentbubble.png)，输入注释，然后选择 **Save (保存)**。  
![\[在拉取请求中添加对文件的评论。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-commenting-addfilecomment.png)
   + 要向拉取请求中的已更改行添加评论，请在 **Changes** 中转到要评论的行。选择为该行显示的注释图标 ![\[The comment bubble icon that that indicates that you can leave a comment on that line of code.\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-commentbubble.png)，输入注释，然后选择 **Save (保存)**。  
![\[在拉取请求中添加对行的评论。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-comment.png)

1. 要回复对提交的评论，请在 **Changes** 或 **Activity** 中，选择 **Reply**。您可以使用文字和表情符号进行回复。  
![\[在评论中添加回复和表情符号反应。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-commenting-commenttab.png)

   您可以通过选择特定表情符号反应回复来查看使用其进行回复的人员的姓名。要查看所有表情符号反应以及有关谁使用了哪些表情符号进行回复的信息，请选择**查看所有反应**。如果您使用表情符号回复了评论，则您的回复将显示在表情符号反应按钮的图标中。
**注意**  
控制台中显示的反应计数在页面加载时是准确的。要了解有关表情符号反应计数的最新信息，请刷新页面，或选择**查看所有反应**。  
![\[查看有关使用表情符号反应回复评论的用户的信息。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-comment-view-reaction.png)

1. （可选）要回复 Amazon CodeGuru Reviewer 创建的推荐，包括提供有关推荐质量的反馈，请选择**回复**。可使用反应按钮，提供有关您是批准还是不批准建议的一般信息。您可使用注释字段，提供有关反应的详细信息。
**注意**  
Amazon CodeGuru Reviewer 是一项自动代码审查服务，它使用程序分析和机器学习来检测 Java 或 Python 代码中的常见问题并推荐修复方法。  
只有当您已将存储库与 Amazon CodeGuru Reviewer 关联起来、分析已完成以及拉取请求中的代码是 Java 或 Python 代码时，您才能看到 Amazon CodeGuru Reviewer 评论。有关更多信息，请参阅 [将 AWS CodeCommit 存储库与 Amazon CodeGuru Reviewer 关联或取消关联](how-to-amazon-codeguru-reviewer.md)。
Amazon CodeGuru Reviewer 评论只有在**对拉取请求的最新修订版发表评论时，才会显示在 “更改**” 选项卡中。它们始终显示在**活动**选项卡中。
虽然您可以对 Amazon CodeGuru Reviewer 推荐使用任何可用的表情符号反应进行回应，但只能使用竖起大拇指和竖起大拇指的表情符号反应来评估推荐的用处。  
![\[Amazon CodeGuru Reviewer 在审核工作正在进行时创建的推荐。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-reply-bot.png)

1. 要审批拉取请求中所做的更改，请选择 **Approve (审批)**。
**注意**  
您无法批准自己创建的拉取请求。

   您可以在 **Approvals (审批)** 中，查看审批、拉取请求的审批规则以及由审批规则模板创建的审批规则。如果您最终决定不希望审批拉取请求，则可选择 **Revoke approval (撤销审批)**。
**注意**  
您只能对处于打开状态的拉取请求进行审批或撤销审批。不能对状态为“已合并”或“已关闭”的拉取请求进行审批或撤销审批。  
![\[拉取请求中的审批和审批规则。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-approval-rule-met.png)

## 审核拉取请求 (AWS CLI)
<a name="how-to-review-pull-request-cli"></a>

要将 AWS CLI 命令与一起使用 CodeCommit，请安装 AWS CLI。有关更多信息，请参阅 [命令行参考](cmd-ref.md)。

您可以使用以下 AWS CLI 命令查看拉取请求：
+ [**post-comment-for-pull-request**](#post-comment-reply)，用于向拉取请求添加评论
+ [**get-comments-for-pull-request**](#get-comments-for-pull-request)，用于查看拉取请求中留下的评论
+ [**update-pull-request-approval-state**](#update-pull-request-approval-state)，用于审批或撤销对拉取请求的批准
+ [**post-comment-reply**](#post-comment-reply)，用于回复拉取请求中的评论

您还可以运行以下命令，对拉取请求中的评论使用表情符号：
+ 要使用表情符号回复评论，请运行 [**put-comment-reaction**](how-to-commit-comment.md#how-to-commit-comment-cli-commit-reply-emoji)。
+ 要查看对评论的表情符号反应，请运行 [**get-comment-reactions**](how-to-commit-comment.md#how-to-commit-comment-cli-commit-emoji-view)。

**使用 AWS CLI 查看 CodeCommit 存储库中的拉取请求**

1. 要向存储库中的拉取请求添加评论，请运行 **post-comment-for-pull-request** 命令，并且指定：
   + 拉取请求的 ID（使用 **--pull-request-id** 选项）。
   + 包含拉取请求的存储库的名称（使用 **--repository-name** 选项）。
   + 将在其中合并拉取请求的目标分支中的提交的完整提交 ID（使用 **--before-commit-id** 选项）。
   + 源分支中的提交的完整提交 ID，它在发布评论时作为拉取请求的分支的当前提示（使用 **--after-commit-id** 选项）。
   + 客户端生成的唯一等幂令牌（使用 **--client-request-token** 选项）。
   + 您的评论的内容（使用 **--content** 选项）。
   + 有关评论放置位置信息的列表，包括：
     + 所比较文件的名称，包括其扩展名和子目录（如果有，则使用 **filePath** 属性）。
     + 在比较文件中更改的行号（使用 **filePosition** 属性）。
     + 对更改的评论在源分支与目标分支之间比较“之前”还是“之后”（使用 **relativeFileVersion** 属性）。

   例如，使用此命令*"These don't appear to be used anywhere. Can we remove them?"*在名为的存储库中 ID 为的拉取请求中将有关更改的评论添加到*ahs\$1count.py*文件*47*中*MyDemoRepo*。

   ```
   aws codecommit post-comment-for-pull-request --pull-request-id "47" --repository-name MyDemoRepo --before-commit-id 317f8570EXAMPLE --after-commit-id 5d036259EXAMPLE --client-request-token 123Example --content "These don't appear to be used anywhere. Can we remove them?" --location filePath=ahs_count.py,filePosition=367,relativeFileVersion=AFTER   
   ```

   如果成功，该命令产生类似以下内容的输出。

   ```
   { 
            "afterBlobId": "1f330709EXAMPLE",
            "afterCommitId": "5d036259EXAMPLE",
            "beforeBlobId": "80906a4cEXAMPLE",
            "beforeCommitId": "317f8570EXAMPLE",
            "comment": {
                  "authorArn": "arn:aws:iam::111111111111:user/Saanvi_Sarkar",
                  "clientRequestToken": "123Example",
                  "commentId": "abcd1234EXAMPLEb5678efgh",
                  "content": "These don't appear to be used anywhere. Can we remove them?",
                  "creationDate": 1508369622.123,
                  "deleted": false,
                  "lastModifiedDate": 1508369622.123,
                  "callerReactions": [],
                  "reactionCounts": []
               }
                "location": { 
                  "filePath": "ahs_count.py",
                  "filePosition": 367,
                  "relativeFileVersion": "AFTER"
                },
            "repositoryName": "MyDemoRepo",
            "pullRequestId": "47"
    }
   ```

1. 要查看拉取请求的评论，请运行 **get-comments-for-pull-request** 命令，并且指定：
   +  CodeCommit 存储库的名称（带`--repository-name`选项）。
   + 系统生成的拉取请求的 ID（使用 `--pull-request-id` 选项）。
   + （可选）要返回下一批结果的枚举令牌（使用 `--next-token` 选项）。
   + (可选) 一个用于限制返回的结果数的非负整数 (使用 `--max-results` 选项)。

   例如，可使用此命令查看 ID 为 42 的拉取请求的注释。

   ```
   aws codecommit get-comments-for-pull-request --pull-request-id 42
   ```

   如果成功，该命令产生类似以下内容的输出。

   ```
   {
      "commentsForPullRequestData": [ 
         { 
            "afterBlobId": "1f330709EXAMPLE",
            "afterCommitId": "5d036259EXAMPLE",
            "beforeBlobId": "80906a4cEXAMPLE",
            "beforeCommitId": "317f8570EXAMPLE",
            "comments": [ 
               { 
                  "authorArn": "arn:aws:iam::111111111111:user/Saanvi_Sarkar",
                  "clientRequestToken": "",
                  "commentId": "abcd1234EXAMPLEb5678efgh",
                  "content": "These don't appear to be used anywhere. Can we remove them?",
                  "creationDate": 1508369622.123,
                  "deleted": false,
                  "lastModifiedDate": 1508369622.123,
                  "callerReactions": [],
                  "reactionCounts": 
                   {
                     "THUMBSUP" : 6,
                     "CONFUSED" : 1
                   }
               },
               {
                  "authorArn": "arn:aws:iam::111111111111:user/Li_Juan",
                  "clientRequestToken": "",
                  "commentId": "442b498bEXAMPLE5756813",
                  "content": "Good catch. I'll remove them.",
                  "creationDate": 1508369829.104,
                  "deleted": false,
                  "lastModifiedDate": 150836912.273,
                  "callerReactions": ["THUMBSUP"]
                  "reactionCounts": 
                   {
                     "THUMBSUP" : 14
                   }
                }
            ],
            "location": { 
               "filePath": "ahs_count.py",
               "filePosition": 367,
               "relativeFileVersion": "AFTER"
            },
            "repositoryName": "MyDemoRepo",
            "pullRequestId": "42"
         }
      ],
      "nextToken": "exampleToken"
   }
   ```

1. <a name="update-pull-request-approval-state"></a>要对拉取请求进行审批或撤销审批，请运行 **update-pull-request-approval-state** 命令，并指定：
   + 拉取请求的 ID（使用 **--pull-request-id** 选项）。
   + 拉取请求的修订 ID（使用 **--revision-id option)**）。您可以使用 [get-pull-request](how-to-view-pull-request.md#get-pull-request) 命令获取拉取请求的当前修订 ID。
   + 要应用的审批状态（使用 **--approval-state** 选项）。有效的审批状态包括 `APPROVE` 和 `REVOKE`。

   例如，使用此命令批准 ID 为、修订版 ID 为*27*的拉取请求*9f29d167EXAMPLE*。

   ```
   aws codecommit update-pull-request-approval-state --pull-request-id 27 --revision-id 9f29d167EXAMPLE --approval-state "APPROVE"
   ```

   如果成功，该命令不返回任何内容。

1. 要在拉取请求中发布对评论的回复，请运行 **post-comment-reply** 命令，并且指定：
   + 要回复的评论的系统生成的 ID（使用 **--in-reply-to** 选项）。
   + 客户端生成的唯一等幂令牌（使用 **--client-request-token** 选项）。
   + 您的回复的内容（使用 **--content** 选项）。

    例如，使用此命令将系统生成的 ID *"Good catch. I'll remove them."* 为的评论添加回复。*abcd1234EXAMPLEb5678efgh*

   ```
   aws codecommit post-comment-reply --in-reply-to abcd1234EXAMPLEb5678efgh --content "Good catch. I'll remove them." --client-request-token 123Example
   ```

   如果成功，该命令产生类似以下内容的输出。

   ```
   { 
       "comment": {
           "authorArn": "arn:aws:iam::111111111111:user/Li_Juan",
           "clientRequestToken": "123Example",
           "commentId": "442b498bEXAMPLE5756813",
           "content": "Good catch. I'll remove them.",
           "creationDate": 1508369829.136,
           "deleted": false,
           "lastModifiedDate": 150836912.221,
           "callerReactions": [],
           "reactionCounts": []
       }
    }
   ```

# 更新拉取请求
<a name="how-to-update-pull-request"></a>

您可以将提交推送到处于打开状态的拉取请求的源分支，从而通过进一步的代码更改来更新拉取请求。有关更多信息，请参阅 [在中创建提交 AWS CodeCommit](how-to-create-commit.md)。

您可以使用 AWS CodeCommit 控制台或 AWS CLI 更新拉取请求的标题或描述。如果存在以下情况，您可能需要更新拉取请求的标题或描述：
+ 其他用户不了解描述或原始标题产生误导。
+ 您希望标题或描述反映您对处于打开状态的拉取请求的源分支所做的更改。

## 更新拉取请求（控制台）
<a name="how-to-update-pull-request-console"></a>

您可以使用 CodeCommit 控制台更新 CodeCommit 存储库中的拉取请求的标题和描述。要更新拉取请求中的代码，请将提交推送到处于打开状态的拉取请求的源分支。

1. 打开 CodeCommit 控制台：[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home)。

1. 在 **Repositories (存储库)** 中，选择要在其中更新拉取请求的存储库的名称。

1. 在导航窗格中，选择**拉取请求**。

1. 默认情况下，会显示所有处于打开状态的拉取请求的列表。选择要更新的处于打开状态的拉取请求。

1. 在拉取请求中，选择 **Details (详细信息)**，然后选择 **Edit details (编辑详细信息)** 以编辑标题或描述。
**注意**  
无法更新已关闭或已合并的拉取请求的标题或描述。

## 更新拉取请求 (AWS CLI)
<a name="how-to-update-pull-request-cli"></a>

要使用 AWS CLI 命令操作 CodeCommit，请安装 AWS CLI。有关更多信息，请参阅 [命令行参考](cmd-ref.md)。

您可能还对以下命令感兴趣：
+ **[update-pull-request-approval-state](how-to-review-pull-request.md#update-pull-request-approval-state)**，用于审批或撤销对拉取请求的审批。
+ [**create-pull-request-approval-rule**](how-to-create-pull-request-approval-rule.md#how-to-create-pull-request-approval-rule-cli)，用于为拉取请求创建审批规则。
+ [**delete-pull-request-approval-rule**](how-to-edit-delete-pull-request-approval-rule.md#delete-pull-request-approval-rule)，用于删除拉取请求的审批规则。
+ [使用创建提交 AWS CLI](how-to-create-commit.md#how-to-create-commit-cli) 或 [使用 Git 客户端创建提交](how-to-create-commit.md#how-to-create-commit-git)，用于创建其他代码更改并将其推送到处于打开状态的拉取请求的源分支。

**使用 AWS CLI 更新 CodeCommit 存储库中的拉取请求**

1. 要更新存储库中拉取请求的标题，请运行 **update-pull-request-title** 命令，并且指定：
   + 拉取请求的 ID（使用 **--pull-request-id** 选项）。
   + 拉取请求的标题（使用 **--title** 选项）。

   例如，要更新 ID 为 *47* 的拉取请求的标题：

   ```
   aws codecommit update-pull-request-title --pull-request-id 47 --title "Consolidation of global variables - updated review"  
   ```

1. 要更新拉取请求的描述，请运行 **update-pull-request-description** 命令，并且指定：
   + 拉取请求的 ID（使用 **--pull-request-id** 选项）。
   + 描述（使用 **--description** 选项）。

    例如，要更新 ID 为 *47* 的拉取请求的描述：

   ```
   aws codecommit update-pull-request-description --pull-request-id 47 --description "Updated the pull request to remove unused global variable."
   ```

# 编辑或删除拉取请求的审批规则
<a name="how-to-edit-delete-pull-request-approval-rule"></a>

如果拉取请求具有审批规则，则该拉取请求无法合并，直到其条件得以满足。您可以更改拉取请求的审批规则，以使其条件更容易满足，或提高审核的严谨性。您可以更改必须审批拉取请求的用户数量。还可以在规则的用户审批池中添加、删除或更改成员资格。最后，如果您不想再对拉取请求使用审批规则，可以将其删除。

**注意**  
您还可以覆盖拉取请求的审批规则。有关更多信息，请参阅 [覆盖拉取请求的审批规则](how-to-override-approval-rules.md)。

您可以使用 AWS CodeCommit 控制台或编辑和删除存储库的批准规则。 AWS CLI 

**Topics**
+ [编辑或删除拉取请求的审批规则（控制台）](#how-to-edit-delete-pull-request-approval-rule-console)
+ [编辑或删除拉取请求的审批规则 (AWS CLI)](#how-to-edit-delete-pull-request-approval-rule-cli)

## 编辑或删除拉取请求的审批规则（控制台）
<a name="how-to-edit-delete-pull-request-approval-rule-console"></a>

您可以使用 CodeCommit 控制台编辑或删除 CodeCommit 仓库中拉取请求的批准规则。

1. 在 [https://console.aws.amazon.com/codesuite/codemmit](https://console.aws.amazon.com/codesuite/codecommit/home) /home 打开 CodeCommit 控制台。

1. 在 **Repositories (存储库)** 中，选择要在其中编辑或删除拉取请求的审批规则的存储库的名称。

1. 在导航窗格中，选择**拉取请求**。

1. 选择要编辑或删除审批规则的拉取请求。您只能编辑和删除处于打开状态的拉取请求的审批规则。  
![\[CodeCommit 控制台中仓库的拉取请求列表。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-view.png)

1. 在拉取请求中，选择 **Approvals (审批)**，然后从列表中选择要编辑或删除的规则。请执行以下操作之一：
   + 如果要编辑规则，请选择 **Edit (编辑)**。
   + 如果要删除规则，请选择 **Delete (删除)**，然后按照说明进行操作，以验证规则是否删除。

1. 在 **Edit approval rule (编辑审批规则)** 中，对规则进行所需的更改，然后选择 **Submit (提交)**。  
![\[编辑审批规则\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-edit-rule.png)

1. 完成审批规则的配置之后，选择 **Submit (提交)**。

 

## 编辑或删除拉取请求的审批规则 (AWS CLI)
<a name="how-to-edit-delete-pull-request-approval-rule-cli"></a>

要将 AWS CLI 命令与一起使用 CodeCommit，请安装 AWS CLI。有关更多信息，请参阅 [命令行参考](cmd-ref.md)。

您可以使用 AWS CLI 来编辑批准规则的内容和删除批准规则。

**注意**  
您可能还对以下命令感兴趣：  
**[update-pull-request-approval-state](how-to-review-pull-request.md#update-pull-request-approval-state)**，用于审批或撤销对拉取请求的审批。
[**get-pull-request-approval-states**](how-to-view-pull-request.md#get-pull-request-approval-state)，用于查看拉取请求的审批。
[**evaluate-pull-request-approval-rules**](how-to-merge-pull-request.md#evaluate-pull-request-approval-rules)，用于确定拉取请求的审批规则是否满足了其条件。

**使用编辑或删除 CodeCommit 存储库中拉取请求的批准规则 AWS CLI **<a name="update-pull-request-approval-rule-content"></a>

1. 要编辑审批规则，请运行 **update-pull-request-approval-rule-content** 命令，并指定：
   + 拉取请求的 ID（使用 **--id** 选项）。
   + 审批规则的名称（使用 **--approval-rule-name** 选项）。
   + 审批规则的内容（使用 **--approval-rule-content** 选项）。

   此示例更新了*Require two approved approvers*为拉取请求命名的批准规则，ID 为*27*。该规则要求一个用户获得包括*123456789012*亚马逊 Web Services 账户中任何 IAM 用户的批准池的批准：

   ```
   aws codecommit update-pull-request-approval-rule-content --pull-request-id 27 --approval-rule-name "Require two approved approvers" --approval-rule-content "{Version: 2018-11-08, Statements: [{Type: \"Approvers\", NumberOfApprovalsNeeded: 1, ApprovalPoolMembers:[\"CodeCommitApprovers:123456789012:user/*\"]}]}}"
   ```

1. <a name="delete-pull-request-approval-rule"></a>要删除审批规则，请运行 **delete-pull-request-approval-rule** 命令，并指定：
   + 拉取请求的 ID（使用 **--id** 选项）。
   + 审批规则的名称（使用 **--approval-rule-name** 选项）。

   例如，要删除名称为 ID 的拉*My Approval Rule*取请求的批准规则*15*：

   ```
   aws codecommit delete-pull-request-approval-rule --pull-request-id 15 --approval-rule-name "My Approval Rule"
   ```

# 覆盖拉取请求的审批规则
<a name="how-to-override-approval-rules"></a>

在正常开发过程中，您希望用户在合并拉取请求之前满足审批规则的条件。但是，有时您可能需要加快合并拉取请求。例如，您可能希望在生产中放置错误修复，但审批池中无人可审批拉取请求。在这种情况下，您可以选择覆盖拉取请求的审批规则。您可以覆盖拉取请求的所有审批规则，包括那些专门为拉取请求创建并从审批规则模板生成的规则。您不能选择性地覆盖特定审批规则，只能覆盖所有规则。通过覆盖规则预留审批规则要求之后，可以将拉取请求合并到其目标分支中。

当您覆盖拉取请求的审批规则时，有关覆盖这些规则的用户的信息将记录在拉取请求的活动中。这样一来，您可以返回拉取请求的历史记录，查看是谁覆盖了规则。如果拉取请求仍处于打开状态，您也可以选择撤销覆盖。拉取请求在合并之后，便无法再撤销覆盖。

**Topics**
+ [覆盖审批规则（控制台）](#how-to-override-approval-rules-console)
+ [覆盖审批规则 (AWS CLI)](#how-to-override-approval-rules-cli)

## 覆盖审批规则（控制台）
<a name="how-to-override-approval-rules-console"></a>

作为拉取请求审核的一部分，您可以在控制台中覆盖拉取请求的审批规则要求。如果您改变主意，可以撤销覆盖，并重新应用审批规则要求。只有当拉取请求仍处于打开状态时，才能覆盖审批规则或撤销覆盖。如果拉取请求已合并或关闭，则无法更改其覆盖状态。

1. 打开 CodeCommit 控制台：[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home)。

1. 在**存储库**中，选择存储库的名称。

1. 在导航窗格中，选择**拉取请求**。选择要覆盖其审批规则要求，或撤销覆盖的拉取请求。

1. 在 **Approvals (审批)** 选项卡上，选择 **Override approval rules (覆盖审批规则)**。这些要求将预留，且按钮文本更改为 **Revoke override (撤销覆盖)**。要重新应用审批规则要求，请选择 **Revoke override (撤销覆盖)**。

## 覆盖审批规则 (AWS CLI)
<a name="how-to-override-approval-rules-cli"></a>

您可以使用 AWS CLI 覆盖审批规则要求。您还可以使用它来查看拉取请求的覆盖状态。<a name="override-approval-rules"></a>

## 覆盖拉取请求的审批规则要求
<a name="override-approval-rules"></a>

1. 在终端或命令行中，运行 **override-pull-request-approval-rules** 命令，并指定：
   + 系统生成的拉取请求的 ID。
   + 拉取请求的最新修订 ID。要查看此信息，请使用 **get-pull-request**。
   + 您希望的覆盖状态，`OVERRIDE` 或 `REVOKE`。`REVOKE` 状态会删除 `OVERRIDE` 状态，但不会保存。

   例如，要覆盖 ID 为 **34** 且修订 ID 为 **927df8d8EXAMPLE** 的拉取请求的审批规则，请运行以下命令：

   ```
   aws codecommit override-pull-request-approval-rules --pull-request-id 34 --revision-id 927df8d8dEXAMPLE --override-status OVERRIDE
   ```

1. 如果成功，该命令不返回任何内容。

1. 要撤销 ID 为 **34** 且修订 ID 为 **927df8d8EXAMPLE** 的拉取请求的覆盖，请运行以下命令：

   ```
   aws codecommit override-pull-request-approval-rules --pull-request-id 34 --revision-id 927df8d8dEXAMPLE --override-status REVOKE
   ```<a name="get-override-status"></a>

## 获取有关拉取请求覆盖状态的信息
<a name="get-override-status"></a>

1. 在终端或命令行中，运行 **get-pull-request-override-state** 命令，并指定：
   + 系统生成的拉取请求的 ID。
   + 拉取请求的最新修订 ID。要查看此信息，请使用 **get-pull-request**。

   例如，要查看 ID 为 **34** 且修订 ID 为 **927df8d8EXAMPLE** 的拉取请求的覆盖状态，请运行以下命令：

   ```
   aws codecommit get-pull-request-override-state --pull-request-id 34 --revision-id 927df8d8dEXAMPLE
   ```

1. 如果成功，该命令产生类似以下内容的输出：

   ```
   {
       "overridden": true,
       "overrider": "arn:aws:iam::123456789012:user/Mary_Major"
   }
   ```

# 合并 AWS CodeCommit 存储库中的拉取请求
<a name="how-to-merge-pull-request"></a>

审核完代码并满足拉取请求的所有审批规则（如果有）后，您可以通过以下几种方式之一合并拉取请求：
+ <a name="is-mergable"></a>您可以在控制台中，使用可用的合并策略之一，将源分支合并到目标分支中，这也会关闭拉取请求。您也可以在控制台中解决合并冲突。控制台将显示一条消息，指示拉取请求是否可合并，或者是否必须解决冲突。当所有冲突都得以解决并选择 **Merge (合并)** 后，将使用您所选合并策略执行合并。快进是默认的合并策略，这是 Git 的默认选项。根据源和目标分支中的代码的状态，可能无法使用该策略，但可以使用其他选项，例如压缩或三向。
+ 在 AWS CLI 中，您可以使用快进、压缩或三向合并策略合并和关闭拉取请求。
+ <a name="why-git-merge"></a>在本地计算机上，可以使用 **git merge** 命令将源分支合并到目标分支中，然后将合并的代码推送到目标分支。这种方法有缺点，你应该仔细考虑。无论对拉取请求的审批规则要求是否得以满足，它都会合并拉取请求，从而绕过这些控件。如果使用快进合并策略合并拉取请求，则合并和推送目标分支也会自动关闭拉取请求。这种方法的一个优点是，**git merge** 命令允许您选择 CodeCommit 控制台中不可用的合并选项或策略。有关 **git merge** 和合并选项的更多信息，请参阅 [git-merge](https://git-scm.com/docs/git-merge) 或 Git 文档。

如果拉取请求的源分支或目标分支已删除，CodeCommit 将自动关闭拉取请求。

**Topics**
+ [合并拉取请求（控制台）](#how-to-merge-pull-request-console)
+ [合并拉取请求 (AWS CLI)](#how-to-merge-pull-request-cli)

## 合并拉取请求（控制台）
<a name="how-to-merge-pull-request-console"></a>

您可以使用 CodeCommit 控制台合并 CodeCommit 存储库中的拉取请求。在拉取请求的状态变为 **Merged (已合并)** 后，它不再显示在处于打开状态的拉取请求列表中。合并的拉取请求划分为 closed (已关闭)。无法将其改回到 **Open (打开)**，但用户仍然可以对更改发表评论和回复评论。合并或关闭拉取请求后，您无法对其进行审批、撤销其审批，或覆盖应用于拉取请求的审批规则。

1. 打开 CodeCommit 控制台：[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home)。

1. 在**存储库**中，选择存储库的名称。

1. 在导航窗格中，选择**拉取请求**。

1. 默认情况下，会显示所有处于打开状态的拉取请求的列表。选择要合并的打开拉取请求。

1. 在拉取请求中，选择 **Approvals (审批)**。查看审批人列表，并验证所有审批规则（如果有）都已满足其条件。如果一个或多个审批规则的状态为 **Rule not satisfied (不满足规则)**，则无法合并拉取请求。如果没有人审批拉取请求，请考虑是否要合并该请求，或者是否要等待审批。
**注意**  
如果为拉取请求创建了审批规则，您可以对其进行编辑或删除以取消阻止合并。如果审批规则是使用审批规则模板创建的，则无法编辑或删除该规则。您只能选择覆盖要求。有关更多信息，请参阅 [覆盖拉取请求的审批规则](how-to-override-approval-rules.md)。  
![\[审批规则的条件尚未满足且审批人列表为空的拉取请求。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-approval-rule-not-met.png)

1. 选择**合并**。

1. 在拉取请求中，在可用的合并策略之间进行选择。无法应用的合并策略将灰显。如果没有可用的合并策略，您可以选择在 CodeCommit 控制台中手动解决冲突，也可以使用 Git 客户端在本地解决冲突。有关更多信息，请参阅 [解决 AWS CodeCommit 存储库中的拉取请求中的冲突](how-to-resolve-conflict-pull-request.md)。  
![\[在 CodeCommit 控制台中显示合并的可用合并策略的拉取请求。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-merge-squash.png)
   + 快进合并会将目标分支引用向前移动到源分支的最新提交。如果可能，这是 Git 的默认行为。不会创建合并提交，但会保留源分支中的所有提交历史记录，就好像它是在目标分支中执行的一样。快进合并在目标分支历史记录的提交可视化视图中不会显示为分支合并，因为没有创建合并提交。源分支提示会快进到目标分支提示。
   + 压缩合并会创建一个包含源分支更改的提交，并将该单个压缩提交应用于目标分支。默认情况下，该压缩提交的提交消息包含源分支中的更改的所有提交消息。不会保留分支更改的各个提交历史记录。这可能有助于简化存储库历史记录，同时仍在目标分支历史记录的提交可视化工具视图中保留合并的图形表示形式。
   + 三向合并会为目标分支中的合并创建合并提交，但还会保留在源分支中执行的各个提交，以作为目标分支历史记录的一部分。这有助于保留存储库更改的完整历史记录。

1. 如果选择压缩或三向合并策略，请查看自动生成的提交消息，并在要更改该信息时对其进行修改。为提交历史记录添加您的姓名和电子邮件地址。

1. （可选）清除在合并期间删除源分支的选项。默认情况下，在合并拉取请求时会删除源分支。

1. 选择 **Merge pull request (合并拉取请求)** 以完成合并。

## 合并拉取请求 (AWS CLI)
<a name="how-to-merge-pull-request-cli"></a>

要使用 AWS CLI 命令操作 CodeCommit，请安装 AWS CLI。有关更多信息，请参阅 [命令行参考](cmd-ref.md)。

**使用 AWS CLI 合并 CodeCommit 存储库中的拉取请求**

1. <a name="evaluate-pull-request-approval-rules"></a>要评估拉取请求是否已满足其所有审批规则并准备好合并，请运行 **evaluate-pull-request-approval-rules** 命令，并指定：
   + 拉取请求的 ID（使用 **--pull-request-id** 选项）。
   + 拉取请求的修订 ID（使用 **--revision-id option)**）。您可以使用 **[get-pull-request](how-to-view-pull-request.md#get-pull-request)** 命令获取拉取请求的当前修订 ID。

   例如，要对 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": []
       }
   }
   ```
**注意**  
此输出指示拉取请求不可合并，因为未满足审批规则的要求。要合并此拉取请求，您可以让审核人审批该请求，以满足规则的条件。根据您的权限和规则的创建方式，您也可以编辑、覆盖或删除规则。有关更多信息，请参阅[审核拉取请求](how-to-review-pull-request.md)、[覆盖拉取请求的审批规则](how-to-override-approval-rules.md)和[编辑或删除拉取请求的审批规则](how-to-edit-delete-pull-request-approval-rule.md)。

1. 要使用快进合并策略合并和关闭拉取请求，请运行 **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"
       }
   }
   ```

1. 要使用压缩合并策略合并和关闭拉取请求，请运行 **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** 选项）。
   + 要用于提交的电子邮件地址（使用 **--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"
       }
   }
   ```

1. 要使用三向合并策略合并和关闭拉取请求，请运行 **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** 选项）。
   + 要用于提交的电子邮件地址（使用 **--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"
       }
   }
   ```

# 解决 AWS CodeCommit 存储库中的拉取请求中的冲突
<a name="how-to-resolve-conflict-pull-request"></a>

如果拉取请求存在冲突而无法合并，您可以尝试使用几种方法之一解决冲突：
+ 在本地计算机上，您可以使用 **git diff** 命令查找两个分支之间的冲突，并进行更改以解决这些冲突。您还可以使用差异工具或其他软件帮助查找和解决差异。在解决这些冲突并感到满意后，您可以推送具有更改（包含解决的冲突）的源分支，这会更新拉取请求。有关 **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. 打开 CodeCommit 控制台：[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home)。

1. 在**存储库**中，选择存储库的名称。

1. 在导航窗格中，选择**拉取请求**。

1. 默认情况下，会显示所有处于打开状态的拉取请求的列表。选择要合并但包含冲突的打开拉取请求。

1. 在拉取请求中，选择 **Resolve conflicts (解决冲突)**。只有在具有必须解决后才能合并拉取请求的冲突时，才会显示该选项。  
![\[显示具有必须解决后才能合并的冲突的拉取请求。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-resolve-conflicts.png)

1. 将打开冲突解决窗口，其中列出具有必须解决的冲突的每个文件。在列表中选择每个文件以查看冲突，并进行所需的任何更改，直到解决了所有冲突。  
![\[显示具有尚未解决的冲突的文件的冲突解决编辑器。\]](http://docs.aws.amazon.com/zh_cn/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>

要使用 AWS CLI 命令操作 CodeCommit，请安装 AWS CLI。有关更多信息，请参阅 [命令行参考](cmd-ref.md)。

您无法使用单个 AWS CLI 命令解决拉取请求中的冲突并合并该请求。不过，您可以使用单个命令查找冲突，尝试解决冲突，以及测试是否可以合并拉取请求。您可以使用：
+ **get-merge-options**，用于找出可以使用哪些合并选项合并两个提交说明符。
+ **get-merge-conflicts**，用于返回具有两个提交说明符之间的合并冲突的文件列表。
+ **batch-describe-merge-conflicts**，用于获取有关文件中的所有合并冲突的信息，这些冲突是在使用指定的合并策略合并两个提交时产生的。
+ **describe-merge-conflicts**，用于获取有关特定文件的合并冲突的详细信息，这些冲突是在使用指定的合并策略合并两个提交时产生的。
+ **create-unreferenced-merge-commit**，用于测试使用指定的合并策略合并两个提交说明符的结果。

1. <a name="get-merge-options"></a>要查找可用于合并两个提交说明符的合并选项，请运行 **get-merge-options** 命令并指定：
   + 合并源的提交说明符（使用 **--source-commit-specifier** 选项）。
   + 合并目标的提交说明符（使用 **--destination-commit-specifier** 选项）。
   + 存储库的名称（使用 **--repository-name** 选项）。
   + （可选）要使用的冲突解决策略（使用 **--conflict-resolution-strategy** 选项）。
   + （可选）任何冲突的所需详细信息级别（使用 **--conflict-detail-level** 选项）。

    例如，要确定可用于在名为 *MyDemoRepo* 的存储库中合并名为 *bugfix-1234* 的源分支与名为 *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>要获取包含两个提交说明符的合并冲突的文件列表，请运行 **get-merge-conflicts** 命令并指定：
   + 合并源的提交说明符（使用 **--source-commit-specifier** 选项）。
   + 合并目标的提交说明符（使用 **--destination-commit-specifier** 选项）。
   + 存储库的名称（使用 **--repository-name** 选项）。
   + 要使用的合并选项（使用 **--merge-option** 选项）。
   + （可选）任何冲突的所需详细信息级别（使用 **--conflict-detail-level** 选项）。
   + （可选）要使用的冲突解决策略（使用 **--conflict-resolution-strategy** 选项）。
   + （可选）要返回的包含冲突的最大文件数（使用 **--max-conflict-files** 选项）。

   例如，要获取包含在名为 MyDemoRepo 的存储库中使用三向合并策略合并名为 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>要获取有关在所有文件或部分文件中包含的两个提交说明符的合并冲突的信息，请运行 **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** 选项）。

    例如，要确定在名为 *MyDemoRepo* 的存储库中使用 *THREE\$1WAY\$1MERGE* 策略将名为 *feature-randomizationfeature* 的源分支与名为 *main* 的目标分支合并时产生的合并冲突，请运行以下命令：

   ```
   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>要获取有关特定文件中包含的两个提交说明符的任何合并冲突的详细信息，请运行 **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** 选项）。

   例如，要确定在名为 *MyDemoRepo* 的存储库中使用 *THREE\$1WAY\$1MERGE* 策略将名为 *feature-randomizationfeature* 的源分支中名为 *readme.md* 的文件与名为 *main* 的目标分支合并时产生的合并冲突，请运行以下命令：

   ```
   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>要创建表示两个提交说明符的合并结果的未引用提交，请运行 **create-unreferenced-merge-commit** 命令并指定：
   + 合并源的提交说明符（使用 **--source-commit-specifier** 选项）。
   + 合并目标的提交说明符（使用 **--destination-commit-specifier** 选项）。
   + 要使用的合并选项（使用 **--merge-option** 选项）。
   + 存储库的名称（使用 **--repository-name** 选项）。
   + （可选）要使用的冲突解决策略（使用 **--conflict-resolution-strategy** 选项）。
   + （可选）任何冲突的所需详细信息级别（使用 **--conflict-detail-level** 选项）。
   + （可选）要包含的提交消息（使用 **--commit-message** 选项）。
   + （可选）要用于提交的姓名（使用 **--name** 选项）。
   + （可选）要用于提交的电子邮件地址（使用 **--email** 选项）。
   + （可选）是否保留任何空文件夹（使用 **--keep-empty-folders** 选项）。

    例如，要确定在名为 *MyDemoRepo* 的存储库中使用 ACCEPT\$1SOURCE 策略将名为 *bugfix-1234* 的源分支与名为 *main* 的目标分支合并时产生的合并冲突，请运行以下命令：

   ```
   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"
   }
   ```

# 关闭 AWS CodeCommit 仓库中的拉取请求
<a name="how-to-close-pull-request"></a>

如果要关闭拉取请求而不合并代码，您可以通过以下几种方法之一完成该操作：
+ 在控制台中，可以关闭拉取请求而不合并代码。如果要使用 **git merge** 命令手动合并分支，或者拉取请求源分支中的代码不是要合并到目标分支中的代码，则需要执行此操作。
+ 您可以删除拉取请求中指定的源分支。 CodeCommit 如果拉取请求的源分支或目标分支被删除，则会自动关闭拉取请求。
+ 在中 AWS CLI，您可以将拉取请求的状态从更新`OPEN`为`CLOSED`。这会关闭拉取请求而不合并代码。

**Topics**
+ [关闭拉取请求（控制台）](#how-to-close-pull-request-console)
+ [关闭拉取请求 (AWS CLI)](#how-to-close-pull-request-cli)

## 关闭拉取请求（控制台）
<a name="how-to-close-pull-request-console"></a>

您可以使用 CodeCommit 控制台关闭 CodeCommit 仓库中的拉取请求。在拉取请求的状态更改为 **Closed (已关闭)** 后，就不能再将其更改回 **Open (打开)**，但用户仍然可以评论更改和回复评论。

1. 在 [https://console.aws.amazon.com/codesuite/codemmit](https://console.aws.amazon.com/codesuite/codecommit/home) /home 打开 CodeCommit 控制台。

1. 在**存储库**中，选择存储库的名称。

1. 在导航窗格中，选择**拉取请求**。

1. 默认情况下，会显示所有处于打开状态的拉取请求的列表。选择要关闭的处于打开状态的拉取请求。  
![\[拉取请求显示在 CodeCommit 控制台中。\]](http://docs.aws.amazon.com/zh_cn/codecommit/latest/userguide/images/codecommit-pull-request-view.png)

1. 在拉取请求中，选择 **Close pull request (关闭拉取请求)**。该选项关闭拉取请求，而不尝试将源分支合并到目标分支中。此选项不提供在关闭拉取请求时删除源分支的方法，但您可以在关闭请求之后自行执行此操作。

## 关闭拉取请求 (AWS CLI)
<a name="how-to-close-pull-request-cli"></a>

要将 AWS CLI 命令与一起使用 CodeCommit，请安装 AWS CLI。有关更多信息，请参阅 [命令行参考](cmd-ref.md)。

**使用关闭 CodeCommit 存储库中的拉取请求 AWS CLI **
+ 要将存储库中拉取请求的状态从 `OPEN` 更新为 `CLOSED`，请运行 **update-pull-request-status** 命令，并且指定：
  + 拉取请求的 ID（使用 **--pull-request-id** 选项）。
  + 拉取请求的状态（使用 **--pull-request-status** 选项）。

  例如，要在名为的 CodeCommit 存储库*CLOSED*中将 ID *42* 为的拉取请求的状态更新为的状态`MyDemoRepo`：

  ```
  aws codecommit update-pull-request-status --pull-request-id 42 --pull-request-status CLOSED  
  ```

  如果成功，该命令产生类似以下内容的输出：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "codecommit:GetRepository",
              "Resource": [
                  "arn:aws:codecommit:us-east-2:111122223333:MySharedDemoRepo"
              ]
          }
      ]
  }
  ```

------