解決中提取請求的衝突AWS CodeCommit儲存庫 - AWS CodeCommit

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

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

解決中提取請求的衝突AWS CodeCommit儲存庫

如果您的提取請求有衝突且無法合併,您可以使用多種方式來嘗試解決衝突:

  • 在您的本機電腦,可以使用 git diff 命令來尋找兩個分支之間的衝突並進行變更來解決衝突。您也可以使用不同的工具或其他軟體,協助您尋找和解決差異。解決問題並感到滿意後,您可以推送包含已解決衝突之變更的來源分支,來更新提取請求。如需 git diffgit difftool 的詳細資訊,請參閱 Git 文件。

  • 在主控台,您可以選擇 Resolve conflicts (解決衝突)。這會開啟純文字編輯器,以類似 git diff 命令的方式來顯示衝突。您可以手動檢閱每個檔案中的衝突、進行變更,然後以您的變更來更新提取請求。

  • 在 AWS CLI 中,您可以使用 AWS CLI 取得合併衝突的相關資訊,並建立未參照的合併遞交來測試合併。

解決拉取請求中的衝突(控制台)

您可以使用 CodeCommit 主控台,解決 CodeCommit 儲存庫中提取請求的衝突。

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

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

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

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

  5. 在提取請求中,選擇 Resolve conflicts (解決衝突)。提取請求中有必須解決然後才能合併的衝突時,才會顯示此選項。

    提取請求,顯示其中有必須解決的衝突,否則不能合併。
  6. 會開啟衝突解決視窗,列出有必須解決之衝突的每個檔案。選擇清單中的每個檔案來檢閱衝突,並進行任何必要的變更,直到所有衝突都解決。

    衝突解決編輯器,其中顯示有尚未解決之衝突的檔案。
    • 您可以選擇使用來源檔案內容、目的地檔案內容,或者如果檔案不是二進位檔案,則手動編輯檔案內容來讓其只包含您想要的變更。標準 git diff 標記用來顯示檔案中目的地 (HEAD) 和來源分支之間的衝突。

    • 如果檔案是二進位檔案、Git 子模組,或是有檔案/資料夾名稱衝突,您必須選擇使用來源檔案或目的地檔案來解決衝突。您無法在 CodeCommit 主控台中查看或編輯二進位檔案。

    • 如果有檔案模式衝突,您可透過選擇來源檔案的檔案模式和目的地檔案的檔案模式,來查看可解決該衝突的選項。

    • 如果您決定要放棄對檔案的變更並恢復為衝突狀態,請選擇 Reset file (重設檔案)。這可讓您以不同的方法來解決衝突。

  7. 對所做的變更感到滿意之後,請選擇 Update pull request (更新提取請求)

    注意

    您必須先解決檔案中的所有衝突,然後才能使用您的變更來成功更新提取請求。

  8. 提取請求會根據您的變更加以更新並變成可合併。您可透過該合併頁面。您可以選擇立即合併提取請求,也可以返回提取請求清單。

解決提取請求中的衝突(AWS CLI)

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

沒有單一AWS CLI命令可讓您解決提取請求中的衝突和合併該請求。不過,您可以使用個別命令來探索衝突、嘗試解決問題,並測試提取請求是否可以合併。您可以使用:

  • get-merge-options,來了解針對兩個遞交指標之間的合併,可使用哪些合併選項。

  • get-merge-conflicts,傳回在兩個遞交指標之間的合併中具有合併衝突的檔案清單。

  • batch-describe-merge-conflicts,使用指定的合併策略,取得在兩個遞交之間的合併中檔案的所有合併衝突相關資訊。

  • describe-merge-conflicts,使用指定的合併策略,取得在兩個遞交之間特定檔案的合併衝突詳細資訊。

  • create-unreferenced-merge-commit,使用指定的合併策略,測試合併兩個遞交指標的結果。

  1. 為了探索兩個遞交指標之間的合併有哪些可用的合併選項,請執行 get-merge-options 命令,指定:

    • 合併來源的遞交指標 (使用 --source-commit-specifier 選項)。

    • 合併目的地的遞交指標 (使用 --destination-commit-specifier 選項)。

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

    • (選用) 要使用的衝突解決策略 (使用 --conflict-resolution-strategy 選項)。

    • (選用) 所需的任何衝突的細節層次 (使用 --conflict-detail-level 選項)。

    例如,要確定可用於合併名為錯誤的同位素,目標分支名為主要存儲庫中名為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" }
  2. 若要取得包含兩個遞交指標間合併之合併衝突的檔案清單,請執行 get-merge-conflicts 命令,指定:

    • 合併來源的遞交指標 (使用 --source-commit-specifier 選項)。

    • 合併目的地的遞交指標 (使用 --destination-commit-specifier 選項)。

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

    • 您想要使用的合併選項 (使用 --merge-option 選項)。

    • (選用) 所需的任何衝突的細節層次 (使用 --conflict-detail-level 選項)。

    • (選用) 要使用的衝突解決策略 (使用 --conflict-resolution-strategy 選項)。

    • (選用) 傳回的含衝突檔案數目上限 (使用 --max-conflict-files 選項)。

    例如,若要在名為 MyDemoRepo 的儲存庫中,使用三向合併策略,取得包含名為 master 之來源分支和名為 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" } } ] }
  3. 若要取得兩個遞交指標之間的合併中,所有檔案或部分檔案之合併衝突的相關資訊,請執行 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

    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" }
  4. 若要取得兩個遞交指標之間的合併中,特定檔案之任何合併衝突的相關資訊,請執行 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 選項)。

    例如,要確定名為自述 .md的源分支中名為此功能-隨機化功能,目標分支名為主要使用三路合併策略在名為MyDemoRepo

    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" }
  5. 若要建立未參照遞交來代表合併兩個遞交指標的結果,請執行 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

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