合併中的提取請求AWS CodeCommit儲存庫 - AWS CodeCommit

AWS CodeCommit 不再提供給新客戶。的現有客戶 AWS CodeCommit 可繼續正常使用此服務。了解更多」

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

合併中的提取請求AWS CodeCommit儲存庫

在檢閱過您的程式碼,且已滿足提取請求的所有核准規則 (如果有的話) 之後,您可以使用下列其中一種方式合併提取請求:

  • 您可以在主控台使用其中一個可用的合併策略,將來源分支合併到目的地分支,這也會關閉提取請求。您也可以在主控台解決任何合併衝突。主控台會顯示訊息,指出提取請求是否可合併,或是否必須解決衝突。解決所有衝突後,如果您選擇 Merge (合併),則會使用您選擇的合併策略來執行合併。向前快轉是預設的合併策略,這是 Git 的預設選項。根據來源和目的地分支中程式碼的狀態,該策略可能無法使用,但可能可以使用其他選項,例如 squash 或三向。

  • 在 AWS CLI 中,您可以使用向前快轉、squash 或三向合併策略來合併和關閉提取請求。

  • 在您的本機電腦上,您可以使用 git merge 命令來將來源分支合併到目的地分支,然後將合併的程式碼推送到目的地分支。這種方法有缺點,你應該仔細考慮。無論是否已滿足提取請求上的核准規則需求,都會避開這些控制而合併提取請求。如果使用向前快轉合併策略來合併提取請求,則合併並推送目的地分支也會自動關閉提取請求。這種方法的一個優點是git merge命令可讓您選擇 CodeCommit 主控台所沒有的合併選項或策略。如需 git merge 和合併選項的詳細資訊,請參閱 git-merge 或 Git 文件。

如果刪除提取請求的來源或目的地分支,CodeCommit 會自動關閉提取請求。

合併提取請求(主控台)

您可以使用 CodeCommit 主控台來合併 CodeCommit 儲存庫中的提取請求。提取請求的狀態變更為 Merged (已合併) 後,該提取請求就不會再出現在開啟的提取請求清單中。已合併的提取請求會歸類為已關閉。它無法變更回 Open (開啟),但使用者仍然可以對變更進行評論並回覆評論。合併或關閉提取請求之後,您無法核准該請求、撤銷其核准,或覆寫已套用至提取請求的核准規則。

  1. 開啟位於的 CodeCommit 主控台https://console.aws.amazon.com/codesuite/codecommit/home

  2. Repositories (儲存庫) 中,選擇儲存庫的名稱。

  3. 在導覽窗格中,選擇 Pull requests (提取請求)

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

  5. 在提取請求中,選擇 Approvals (核准)。檢閱核准者清單,並確認已滿足所有核准規則 (如果有的話) 的條件。如果一或多個核准規則的狀態為 Rule not satisfied (未滿足規則),則您無法合併提取請求。如果沒有人核准提取請求,請考慮是否要合併,或是否要等待核准。

    注意

    如果已針對提取請求建立核准規則,您可以編輯核准規則,或刪除核准規則以解除封鎖合併。如果核准規則是根據核准規則範本而建立,則您無法編輯或刪除核准規則。您只能選擇覆寫需求。如需詳細資訊,請參閱 提取請求的核可規則

    此提取請求顯示未滿足條件的核准規則,以及空白的核准人清單。
  6. 選擇 Merge (合併)

  7. 在提取請求中,選擇可用的合併策略。無法套用的合併策略會呈現灰色。如果沒有可用的合併策略,您可以選擇在 CodeCommit 主控台中動解決衝突,或者使用 Git 用本機解決衝突。如需詳細資訊,請參閱 解決中提取請求的衝突AWS CodeCommit儲存庫

    提取請求,並顯示可用於 CodeCommit 主控台中合併的合併策略。
    • 向前快轉合併會將目的地分支的參考向前移動到來源分支的最新遞交。這是 Git 的預設行為 (如果可能)。不會建立合併遞交,但會保留來自來源分支的所有遞交歷史記錄,就好像發生在目的地分支一樣。在目的地分支歷史記錄的遞交視覺化檢視中,向前快轉合併不會顯示為分支合併,因為沒有建立合併遞交。來源分支的尖端會向前快轉到目的地分支的尖端。

    • Squash 合併會建立一個遞交,其中包含來源分支的變更,並將該單一壓縮的遞交套用至目的地分支。預設情況下,該 squash 遞交的遞交訊息會包含來源分支中變更的所有遞交訊息。不會保留分支變更的個別遞交歷史記錄。這可協助簡化您的儲存庫歷史記錄,同時仍在目的地分支歷史記錄的 Commit visualizer 檢視中保留合併的圖形呈現方式。

    • 三向合併會在目的地分支中建立合併的遞交訊息,同時也會在目的地分支的歷史記錄中保留來源分支中所做的個別遞交。這可協助保持儲存庫變更的完整歷史記錄。

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

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

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

合併提取請求 (AWS CLI)

使用AWS CLI命令,請安裝AWS CLI。如需詳細資訊,請參閱 命令列參考

若要使用 AWS for WordPressAWS CLI合併 CodeCommit 儲存庫中的提取請求

  1. 若要評估提取請求的所有核准規則是否已滿足,且已可合併,請執行 evaluate-pull-request-approval-rules 命令,並指定:

    • 提取請求的 ID (使用 --pull-request-id 選項)。

    • 提取請求的修訂 ID (使用 --revision-id option)。您可以使用 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": [] } }
    注意

    此輸出指出提取請求無法合併,因為尚未滿足核准規則的需求。若要合併此提取請求,您可以請檢閱者核准它,以符合規則的條件。根據您的許可和規則的建立方式,您可能還可以編輯、覆寫或刪除規則。如需詳細資訊,請參閱 檢閱提取請求提取請求的核可規則編輯或刪除提取請求的核準規則

  2. 若要使用向前快轉合併策略來合併和關閉提取請求,請執行 merge-pull-request-by-fast-forward 命令,指定:

    • 提取請求的 ID (使用 --pull-request-id 選項)。

    • 來源分支頂端的完整遞交 ID (使用 --source-commit-id 選項)。

    • 儲存庫的名稱 (使用 --repository-name 選項)。

    例如,若要合併和關閉 ID 為47和源提交 ID例如存儲庫中名為MyDemoRepo

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

    如果此命令成功執行,您會看到類似如下的輸出產生:

    { "pullRequest": { "approvalRules": [ { "approvalRuleContent": "{\"Version\": \"2018-11-08\",\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 1,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}", "approvalRuleId": "dd8b17fe-EXAMPLE", "approvalRuleName": "I want one approver for this pull request", "creationDate": 1571356106.936, "lastModifiedDate": 571356106.936, "lastModifiedUser": "arn:aws:iam::123456789012:user/Mary_Major", "ruleContentSha256": "4711b576EXAMPLE" } ], "authorArn": "arn:aws:iam::123456789012:user/Li_Juan", "clientRequestToken": "", "creationDate": 1508530823.142, "description": "Review the latest changes and updates to the global variables", "lastActivityDate": 1508887223.155, "pullRequestId": "47", "pullRequestStatus": "CLOSED", "pullRequestTargets": [ { "destinationCommit": "9f31c968EXAMPLE", "destinationReference": "refs/heads/main", "mergeMetadata": { "isMerged": true, "mergedBy": "arn:aws:iam::123456789012:user/Mary_Major" }, "repositoryName": "MyDemoRepo", "sourceCommit": "99132ab0EXAMPLE", "sourceReference": "refs/heads/variables-branch" } ], "title": "Consolidation of global variables" } }
  3. 若要使用 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 選項)。

    下列範例合併和關閉 ID 為47和源提交 ID例如存儲庫中名為MyDemoRepo。使用的衝突細節為 LINE_LEVEL,衝突解決策略為 ACCEPT_SOURCE

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

    如果成功,這個命令會產生與透過向前快轉合併相同的輸出類型,輸出類似於以下內容:

    { "pullRequest": { "approvalRules": [ { "approvalRuleContent": "{\"Version\": \"2018-11-08\",\"DestinationReferences\": [\"refs/heads/main\"],\"Statements\": [{\"Type\": \"Approvers\",\"NumberOfApprovalsNeeded\": 2,\"ApprovalPoolMembers\": [\"arn:aws:sts::123456789012:assumed-role/CodeCommitReview/*\"]}]}", "approvalRuleId": "dd8b17fe-EXAMPLE", "approvalRuleName": "2-approver-rule-for-main", "creationDate": 1571356106.936, "lastModifiedDate": 571356106.936, "lastModifiedUser": "arn:aws:iam::123456789012:user/Mary_Major", "originApprovalRuleTemplate": { "approvalRuleTemplateId": "dd8b17fe-EXAMPLE", "approvalRuleTemplateName": "2-approver-rule-for-main" }, "ruleContentSha256": "4711b576EXAMPLE" } ], "authorArn": "arn:aws:iam::123456789012:user/Li_Juan", "clientRequestToken": "", "creationDate": 1508530823.142, "description": "Review the latest changes and updates to the global variables", "lastActivityDate": 1508887223.155, "pullRequestId": "47", "pullRequestStatus": "CLOSED", "pullRequestTargets": [ { "destinationCommit": "9f31c968EXAMPLE", "destinationReference": "refs/heads/main", "mergeMetadata": { "isMerged": true, "mergedBy": "arn:aws:iam::123456789012:user/Mary_Major" }, "repositoryName": "MyDemoRepo", "sourceCommit": "99132ab0EXAMPLE", "sourceReference": "refs/heads/variables-branch" } ], "title": "Consolidation of global variables" } }
  4. 若要使用三向合併策略來合併和關閉提取請求,請執行 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 選項)。

    下列範例合併和關閉 ID 為47和源提交 ID例如存儲庫中名為MyDemoRepo。衝突細節和衝突解決策略都使用預設選項:

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