

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 AWS CodeCommit 儲存庫中使用提取請求
<a name="pull-requests"></a>

為了讓您和其他儲存庫使用者可以檢閱程式碼變更、做註解，以及從一個分支合併到另一個分支，提取請求是主要方式。您可以使用提取請求來共同檢閱程式碼變更，以了解已發行軟體的次要變更或修正、新增的主要功能或新版本。以下是提取請求的一個可能的工作流程：

Li Juan 是在名為 MyDemoRepo 的儲存庫中工作的開發人員，想要為即將推出版本的產品使用新功能。為了將她的工作與可正式運作的程式碼分開，她在預設分支以外再建立一個分支，並命名為 *feature-randomizationfeature*。她撰寫程式碼、進行遞交，然後將新功能程式碼推送到這個分支。在將她的變更合併到預設分支之前，她希望其他儲存庫使用者能夠檢閱程式碼的品質。為了這樣做，她建立提取請求。提取請求包含她的工作分支與她想合併變更的程式碼分支 (在此案例中為預設分支) 之間的比較。她也可以建立核准規則，要求指定數目的使用者核准其提取請求。她甚至可以指定使用者的核准集區。其他使用者檢閱她的程式碼和變更，並新增註解和建議。她可能根據註解而以程式碼變更來多次更新她的工作分支。每次她將變更推送到 CodeCommit 中的分支時，都會將其納入提取請求。在提取請求已開啟的情況下，她也可能納入預定目的地分支中已發生的變更，讓使用者確信他們檢閱的是相關情境下所有提議的變更。當她和檢閱者都感到滿意，且已滿足核准規則 (如果有的話) 的條件時，她或其中一位檢閱者可合併程式碼並關閉提取請求。

![\[建立提取請求\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-pull-request-create.png)


提取請求需要兩個分支：來源分支 - 包含您希望檢閱的程式碼；目的地分支 - 在此處合併已檢閱的程式碼。來源分支包含「之後」遞交，此遞交包含您想要合併到目的地分支的變更。目的地分支包含「之前」遞交，這代表提取請求分支合併到目的地分支之前的程式碼狀態。合併策略的選擇會影響 CodeCommit 主控台中來源和目的地分支之間遞交合併方式的詳細資訊。如需在 CodeCommit 中合併策略的詳細資訊，請參閱 [合併提取請求 （主控台）](how-to-merge-pull-request.md#how-to-merge-pull-request-console)。

![\[提取請求的來源和目的地分支，顯示之前和之後遞交之間的關係\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-pull-request-concepts.png)


提取請求會顯示建立提取請求時，在來源分支的頂端與目的地分支的最新遞交之間的差異，讓使用者可以檢視變更並做註解。您可以將變更遞交並推送到來源分支，以更新提取請求來回應註解。

![\[對提取請求中的行新增評論。\]](http://docs.aws.amazon.com/zh_tw/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. 在 https：//[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) 開啟 CodeCommit 主控台。

1. 在 **Repositories (儲存庫)** 中，選擇您要建立提取請求所在儲存庫的名稱。

1. 在導覽窗格中，選擇 **Pull requests (提取請求)**。
**提示**  
您也可以從 **Branches (分支)** 和 **Code (程式碼)** 建立提取請求。

1. 選擇 **Create pull request (建立提取請求)**。  
![\[從 CodeCommit 主控台的提取請求頁面建立提取請求。\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-pull-request-view.png)

1. 在 **Create pull request (建立提取請求)** 的 **Source (來源)** 中，選擇分支，其中包含您希望檢閱的變更。

1. 在**目的地**中，選擇您要在提取請求關閉時合併程式碼變更的分支。

1. 選擇 **Compare (比較)**。系統會就這兩個分支執行比較，並顯示它們之間的差異。也會執行分析來判斷在提取請求關閉時，是否可自動合併這兩個分支。

1. 檢閱比較詳細資訊和變更，以確認提取請求包含您希望檢閱的變更和遞交。如果未包含，請調整您的來源和目的地分支選項，然後再次選擇 **Compare (比較)**。

1. 當您對提取請求的比較結果感到滿意時，請在 **Title (標題)** 中為此檢閱輸入簡短但具描述性的標題。這是在儲存庫的提取請求清單中顯示的標題。

1. (選用) 在 **Description (描述)** 中，輸入此檢閱的詳細資訊，以及對檢閱者有用的任何其他資訊。

1. 選擇**建立**。  
![\[建立提取請求\]](http://docs.aws.amazon.com/zh_tw/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>

若要搭配 CodeCommit 使用 AWS CLI 命令，請安裝 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* 來源分支為目標。提取請求將合併到名為 的 CodeCommit 儲存庫中的預設分支*主*目錄`MyDemoRepo`：

  ```
  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：//[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) 開啟 CodeCommit 主控台。

1. 在 **Repositories (儲存庫)** 中，選擇您要為提取請求建立核准規則的儲存庫名稱。

1. 在導覽窗格中，選擇 **Pull requests (提取請求)**。

1. 從清單中選擇您要建立核准規則的提取請求。您只能對未結案的提取請求建立核准規則。  
![\[CodeCommit 主控台中儲存庫的提取請求清單。\]](http://docs.aws.amazon.com/zh_tw/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_tw/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 Resource Name (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>

若要搭配 CodeCommit 使用 AWS CLI 命令，請安裝 AWS CLI。如需詳細資訊，請參閱[命令列參考](cmd-ref.md)。

## 在 CodeCommit 儲存庫中建立提取請求的核准規則

+ 執行 **create-pull-request-approval-rule** 命令，並指定：
  + 提取請求的 ID (使用 **--id** 選項)。
  + 核准規則的名稱 (使用 **--approval-rule-name** 選項)。
  + 核准規則的內容 (使用 **--approval-rule-content** 選項)。

  建立核准規則時，您有兩種方式在核准集區中指定核准者：
  + **CodeCommitApprovers**：此選項只需要 Amazon 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 Resource Name (ARN)。

  如需 IAM ARNs、萬用字元和格式的詳細資訊，請參閱 [IAM 識別符](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)。

  下列範例針對 ID 為 `27` 的提取請求，建立名為 `Require two approved approvers` 的核准規則。此規則指定需要有來自核准集區的兩個核准。集區包含存取 CodeCommit 並在 Amazon Web Services `123456789012` 帳戶中擔任 角色**CodeCommitReview**的所有使用者。它還包括`Nikhil_Jayashankar`在相同 Amazon Web Services 帳戶中名為 的 IAM 使用者或聯合身分使用者：

  ```
  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：//[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) 開啟 CodeCommit 主控台。

1. 在 **Repositories (儲存庫)** 中，選擇您要檢視提取請求所在儲存庫的名稱。

1. 在導覽窗格中，選擇 **Pull requests (提取請求)**。

1. 依預設，會顯示所有開啟的提取請求清單。  
![\[提取 AWS CodeCommit 主控台中顯示的請求。\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-pull-request-view-list.png)

1. 若要變更顯示篩選，請從可用的篩選清單中選擇：
   + **Open pull requests (開啟中的提取請求)** (預設)：顯示狀態為 **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>

若要搭配 CodeCommit 使用 AWS CLI 命令，請安裝 AWS CLI。如需詳細資訊，請參閱[命令列參考](cmd-ref.md)。

請依照下列步驟，使用 AWS CLI 在 CodeCommit 儲存庫中檢視提取請求。

1. 若要檢視儲存庫中提取請求的清單，請執行 **list-pull-requests** 命令，指定：
   + 您要檢視提取請求的 CodeCommit 儲存庫名稱 （使用 **--repository-name**選項）。
   + (選用) 提取請求的狀態 (使用 **--pull-request-status** 選項)。
   + （選用） 建立提取請求的 IAM 使用者的 Amazon Resource Name (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"]
   }
   ```

   提取請求 ID 會以最新活動的順序顯示。

1. 若要檢視提取請求的詳細資訊，請執行 **get-pull-request** 命令加上 **--pull-request-id** 選項，指定提取請求的 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 為 *8* 且修訂 ID 為 *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. 若要檢視提取請求中的事件，請執行 **describe-pull-request-events** 命令加上 **--pull-request-id** 選項，指定提取請求的 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** 選項) 

   例如，若要檢視名為 *my-feature-branch* 的來源分支和名為 *main* 的目的地分支在名為 的儲存庫中是否有任何合併衝突`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**命令或 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：//[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) 開啟 CodeCommit 主控台。

1. 在 **Repositories (儲存庫)** 中，選擇儲存庫的名稱。

1. 在導覽窗格中，選擇 **Pull requests (提取請求)**。

1. 依預設，會顯示所有開啟的提取請求清單。選擇您想要檢閱的開啟中提取請求。  
![\[開啟 CodeCommit 主控台中顯示的提取請求。\]](http://docs.aws.amazon.com/zh_tw/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_tw/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_tw/codecommit/latest/userguide/images/codecommit-commentbubble.png)，輸入評論，然後選擇 **Save (儲存)**。  
![\[對提取請求中的檔案新增評論。\]](http://docs.aws.amazon.com/zh_tw/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_tw/codecommit/latest/userguide/images/codecommit-commentbubble.png)，輸入評論，然後選擇 **Save (儲存)**。  
![\[對提取請求中的行新增評論。\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-pull-request-comment.png)

1. 若要回覆對遞交的評論，在 **Changes (變更)** 或 **Activity (活動)** 中，選擇 **Reply (回覆)**。您可以使用文字和表情符號來回覆 。  
![\[將回應和表情符號反應新增至註解。\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-commenting-commenttab.png)

   您可以選擇回應特定表情符號回應的人員名稱。若要檢視所有表情符號反應，以及誰回應哪些表情符號的相關資訊，請選擇**檢視所有反應**。如果您已使用表情符號回應註解，您的回應會顯示在表情符號反應按鈕的 圖示中。
**注意**  
在載入頁面時，主控台中顯示的反應計數是準確的。如需表情符號反應計數的最新資訊，請重新整理頁面，或選擇**檢視所有反應**。  
![\[檢視使用表情符號反應回應評論之使用者的相關資訊。\]](http://docs.aws.amazon.com/zh_tw/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_tw/codecommit/latest/userguide/images/codecommit-pull-request-reply-bot.png)

1. 若要核准提取請求中所做的變更，請選擇 **Approve (核准)**。
**注意**  
您無法核准您建立的提取請求。

   您可以在 **Approvals (核准)** 中檢視核准、提取請求的核准規則、以及由核准規則範本建立的核准規則。如果您最後決定不要核准提取請求，您可以選擇 **Revoke approval (撤銷核准)**。
**注意**  
您只能核准或撤銷未結案提取請求的核准。如果提取請求的狀態為 Merged (已合併) 或 Closed (已關閉)，您無法核准或撤銷核准。  
![\[提取請求中的核准與核准規則。\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-approval-rule-met.png)

## 檢閱提取請求 (AWS CLI)
<a name="how-to-review-pull-request-cli"></a>

若要搭配 CodeCommit 使用 AWS CLI 命令，請安裝 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** 屬性)。
     + 對變更的評論在來源與目的地分支之間比較中為 "before" 或 "after" (使用 **relativeFileVersion** 屬性)。

   例如，使用此命令來新增註解*「這些似乎不會在任何地方使用。我們是否可以移除它們？」* 在名為 *MyDemoRepo* 的儲存庫中，提取請求中的 *ahs\$1count.py* 檔案變更 ID 為 *47*。

   ```
   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 為 *27* 且修訂 ID 為 *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 為 *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. 在 https：//[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) 開啟 CodeCommit 主控台。

1. 在 **Repositories (儲存庫)** 中，選擇您要更新提取請求所在儲存庫的名稱。

1. 在導覽窗格中，選擇 **Pull requests (提取請求)**。

1. 依預設，會顯示所有開啟的提取請求清單。選擇您想要更新的開啟中提取請求。

1. 在提取請求中，選擇 **Details (詳細資訊)**，然後選擇 **Edit details (編輯詳細資訊)**，以編輯標題或描述。
**注意**  
您無法更新已關閉或合併的提取請求的標題或描述。

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

若要搭配 CodeCommit 使用 AWS CLI 命令，請安裝 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：//[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) 開啟 CodeCommit 主控台。

1. 在 **Repositories (儲存庫)** 中，選擇儲存庫的名稱，您將於其中編輯或刪除提取請求的核准規則。

1. 在導覽窗格中，選擇 **Pull requests (提取請求)**。

1. 選擇您要在哪個提取請求中編輯或刪除核准規則。您只能在未結案的提取請求中編輯及刪除核准規則。  
![\[CodeCommit 主控台中儲存庫的提取請求清單。\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-pull-request-view.png)

1. 在提取請求中，選擇 **Approvals (核准)**，然後從清單中選擇要編輯或刪除的規則。執行以下任意一項：
   + 如果想要編輯規則，請選擇 **Edit (編輯)**。
   + 如果要刪除規則，請選擇 **Delete (刪除)**，然後依照指示確認是否刪除規則。

1. 在 **Edit approval rule (編輯核准規則)** 中，變更規則，然後選擇 **Submit (提交)**。  
![\[編輯核准規則\]](http://docs.aws.amazon.com/zh_tw/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>

若要搭配 CodeCommit 使用 AWS CLI 命令，請安裝 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)，判斷提取請求的核准規則是否已滿足條件。

**使用 AWS CLI 在 CodeCommit 儲存庫中編輯或刪除提取請求的核准規則**<a name="update-pull-request-approval-rule-content"></a>

1. 若要編輯核准規則，請執行 **update-pull-request-approval-rule-content** 命令，並指定：
   + 提取請求的 ID (使用 **--id** 選項)。
   + 核准規則的名稱 (使用 **--approval-rule-name** 選項)。
   + 核准規則的內容 (使用 **--approval-rule-content** 選項)。

   此範例會更新名為 *的核准規則，針對 ID 為 27 的提取請求需要兩個核准的核准者*。 **此規則需要一個來自核准集區的使用者核准，其中包含 *123456789012* Amazon 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 為 *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：//[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home)。

1. 在 **Repositories (儲存庫)** 中，選擇儲存庫的名稱。

1. 在導覽窗格中，選擇 **Pull requests (提取請求)**。選擇您要覆寫核准規則需求或撤銷覆寫的提取請求。

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 的預設選項。根據來源和目的地分支中程式碼的狀態，該策略可能無法使用，但可能可以使用其他選項，例如 squash 或三向。
+ 您可以使用 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 (已合併)** 後，該提取請求就不會再出現在開啟的提取請求清單中。已合併的提取請求會歸類為已關閉。它無法變更回 **Open (開啟)**，但使用者仍然可以對變更進行評論並回覆評論。合併或關閉提取請求之後，您無法核准該請求、撤銷其核准，或覆寫已套用至提取請求的核准規則。

1. 在 https：//[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) 開啟 CodeCommit 主控台。

1. 在 **Repositories (儲存庫)** 中，選擇儲存庫的名稱。

1. 在導覽窗格中，選擇 **Pull requests (提取請求)**。

1. 依預設，會顯示所有開啟的提取請求清單。選擇您想要合併的開啟中提取請求。

1. 在提取請求中，選擇 **Approvals (核准)**。檢閱核准者清單，並確認已滿足所有核准規則 (如果有的話) 的條件。如果一或多個核准規則的狀態為 **Rule not satisfied (未滿足規則)**，則您無法合併提取請求。如果沒有人核准提取請求，請考慮是否要合併，或是否要等待核准。
**注意**  
如果已針對提取請求建立核准規則，您可以編輯核准規則，或刪除核准規則以解除封鎖合併。如果核准規則是根據核准規則範本而建立，則您無法編輯或刪除核准規則。您只能選擇覆寫需求。如需詳細資訊，請參閱[覆寫提取請求的核准規則](how-to-override-approval-rules.md)。  
![\[此提取請求顯示未滿足條件的核准規則，以及空白的核准人清單。\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-approval-rule-not-met.png)

1. 選擇 **Merge (合併)**。

1. 在提取請求中，選擇可用的合併策略。無法套用的合併策略會呈現灰色。如果沒有可用的合併策略，您可以選擇手動解決 CodeCommit 主控台中的衝突，也可以使用 Git 用戶端在本機解決衝突。如需詳細資訊，請參閱[解決 AWS CodeCommit 儲存庫中提取請求中的衝突](how-to-resolve-conflict-pull-request.md)。  
![\[顯示 CodeCommit 主控台中可用於合併的合併策略的提取請求。\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-merge-squash.png)
   + 向前快轉合併會將目的地分支的參考向前移動到來源分支的最新遞交。這是 Git 的預設行為 (如果可能)。不會建立合併遞交，但會保留來自來源分支的所有遞交歷史記錄，就好像發生在目的地分支一樣。在目的地分支歷史記錄的遞交視覺化檢視中，向前快轉合併不會顯示為分支合併，因為沒有建立合併遞交。來源分支的尖端會向前快轉到目的地分支的尖端。
   + Squash 合併會建立一個遞交，其中包含來源分支的變更，並將該單一壓縮的遞交套用至目的地分支。預設情況下，該 squash 遞交的遞交訊息會包含來源分支中變更的所有遞交訊息。不會保留分支變更的個別遞交歷史記錄。這可協助簡化您的儲存庫歷史記錄，同時仍在目的地分支歷史記錄的 Commit visualizer 檢視中保留合併的圖形呈現方式。
   + 三向合併會在目的地分支中建立合併的遞交訊息，同時也會在目的地分支的歷史記錄中保留來源分支中所做的個別遞交。這可協助保持儲存庫變更的完整歷史記錄。

1. 如果您選擇 squash 或三向合併策略，請檢閱自動產生的遞交訊息，如果您要變更資訊請加以修改。為遞交歷史記錄新增您的名稱和電子郵件地址。

1. (選擇性) 清除在合併時刪除來源分支的選項。預設是在合併提取請求時刪除來源分支。

1. 選擇 **Merge pull request (合併提取請求)** 完成合併。

## 合併提取請求 (AWS CLI)
<a name="how-to-merge-pull-request-cli"></a>

若要搭配 CodeCommit 使用 AWS CLI 命令，請安裝 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. 若要使用 squash 合併策略來合併和關閉提取請求，請執行 **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. 在 [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home)：// 開啟 CodeCommit 主控台。

1. 在 **Repositories (儲存庫)** 中，選擇儲存庫的名稱。

1. 在導覽窗格中，選擇 **Pull requests (提取請求)**。

1. 依預設，會顯示所有開啟的提取請求清單。選擇您想要合併但包含衝突的開啟中提取請求。

1. 在提取請求中，選擇 **Resolve conflicts (解決衝突)**。提取請求中有必須解決然後才能合併的衝突時，才會顯示此選項。  
![\[提取請求，顯示其中有必須解決的衝突，否則不能合併。\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-pull-request-resolve-conflicts.png)

1. 會開啟衝突解決視窗，列出有必須解決之衝突的每個檔案。選擇清單中的每個檔案來檢閱衝突，並進行任何必要的變更，直到所有衝突都解決。  
![\[衝突解決編輯器，其中顯示有尚未解決之衝突的檔案。\]](http://docs.aws.amazon.com/zh_tw/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**，來了解針對兩個遞交指標之間的合併，可使用哪些合併選項。
+ **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** 選項)。

    例如，若要判斷可用於合併名為 *bugfix-1234* 的來源分支與名為 *MyDemoRepo* 之儲存庫中*主要*的目的地分支的合併策略：

   ```
   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** 選項)。

   例如，若要取得檔案清單，其中包含名為 feature-randomizationfeature 的來源分支與名為 main 的目的地分支之間的合併衝突，請使用名為 MyDemoRepo 的儲存庫中的三向合併策略：

   ```
   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** 選項)。
   + (選用) 傳回的合併 hunk 數目上限 (使用 **--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** 選項)。
   + (選用) 傳回的合併 hunk 數目上限 (使用 **--max-merge-hunks** 選項)。
   + (選用) 傳回的含衝突檔案數目上限 (使用 **--max-conflict-files** 選項)。

   例如，若要使用名為 *MyDemoRepo* 的儲存庫*readme.md*中的 *THREE\$1WAY\$1MERGE* 策略，判斷名為 *feature-randomizationfeature* 之來源分支中名為 *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：//[https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) 開啟 CodeCommit 主控台。

1. 在 **Repositories (儲存庫)** 中，選擇儲存庫的名稱。

1. 在導覽窗格中，選擇 **Pull requests (提取請求)**。

1. 依預設，會顯示所有開啟的提取請求清單。選擇您想要關閉的開啟中提取請求。  
![\[CodeCommit 主控台中顯示的提取請求。\]](http://docs.aws.amazon.com/zh_tw/codecommit/latest/userguide/images/codecommit-pull-request-view.png)

1. 在提取請求中，選擇 **Close pull request (關閉提取請求)**。此選項會關閉提取請求，而不會嘗試將來源分支合併到目的地分支。此選項不會提供方式在關閉提取請求時刪除來源分支，但您可以在請求關閉之後自行執行該動作。

## 關閉提取請求 (AWS CLI)
<a name="how-to-close-pull-request-cli"></a>

若要搭配 CodeCommit 使用 AWS CLI 命令，請安裝 AWS CLI。如需詳細資訊，請參閱[命令列參考](cmd-ref.md)。

**使用 AWS CLI 關閉 CodeCommit 儲存庫中的提取請求**
+ 若要將儲存庫中提取請求的狀態從 `OPEN` 更新為 `CLOSED`，請執行 **update-pull-request-status** 命令，指定：
  + 提取請求的 ID (使用 **--pull-request-id** 選項)。
  + 提取請求的狀態 (使用 **--pull-request-status** 選項)。

  例如，若要在名為 的 CodeCommit 儲存庫中，將 ID 為 *42* 的提取請求狀態更新為 *CLOSED* 狀態`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"
              ]
          }
      ]
  }
  ```

------