AWS CodeCommit 不再提供給新客戶。的現有客戶 AWS CodeCommit 可繼續正常使用此服務。了解更多」
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
解決中提取請求的衝突AWS CodeCommit儲存庫
如果您的提取請求有衝突且無法合併,您可以使用多種方式來嘗試解決衝突:
-
在您的本機電腦,可以使用 git diff 命令來尋找兩個分支之間的衝突並進行變更來解決衝突。您也可以使用不同的工具或其他軟體,協助您尋找和解決差異。解決問題並感到滿意後,您可以推送包含已解決衝突之變更的來源分支,來更新提取請求。如需 git diff 和 git difftool 的詳細資訊,請參閱 Git 文件。
-
在主控台,您可以選擇 Resolve conflicts (解決衝突)。這會開啟純文字編輯器,以類似 git diff 命令的方式來顯示衝突。您可以手動檢閱每個檔案中的衝突、進行變更,然後以您的變更來更新提取請求。
在 AWS CLI 中,您可以使用 AWS CLI 取得合併衝突的相關資訊,並建立未參照的合併遞交來測試合併。
解決拉取請求中的衝突(控制台)
您可以使用 CodeCommit 主控台,解決 CodeCommit 儲存庫中提取請求的衝突。
-
開啟位於的 CodeCommit 主控台https://console.aws.amazon.com/codesuite/codecommit/home
。 -
在 Repositories (儲存庫) 中,選擇儲存庫的名稱。
-
在導覽窗格中,選擇 Pull requests (提取請求)。
-
依預設,會顯示所有開啟的提取請求清單。選擇您想要合併但包含衝突的開啟中提取請求。
-
在提取請求中,選擇 Resolve conflicts (解決衝突)。提取請求中有必須解決然後才能合併的衝突時,才會顯示此選項。
-
會開啟衝突解決視窗,列出有必須解決之衝突的每個檔案。選擇清單中的每個檔案來檢閱衝突,並進行任何必要的變更,直到所有衝突都解決。
-
您可以選擇使用來源檔案內容、目的地檔案內容,或者如果檔案不是二進位檔案,則手動編輯檔案內容來讓其只包含您想要的變更。標準 git diff 標記用來顯示檔案中目的地 (HEAD) 和來源分支之間的衝突。
-
如果檔案是二進位檔案、Git 子模組,或是有檔案/資料夾名稱衝突,您必須選擇使用來源檔案或目的地檔案來解決衝突。您無法在 CodeCommit 主控台中查看或編輯二進位檔案。
-
如果有檔案模式衝突,您可透過選擇來源檔案的檔案模式和目的地檔案的檔案模式,來查看可解決該衝突的選項。
-
如果您決定要放棄對檔案的變更並恢復為衝突狀態,請選擇 Reset file (重設檔案)。這可讓您以不同的方法來解決衝突。
-
對所做的變更感到滿意之後,請選擇 Update pull request (更新提取請求)。
注意
您必須先解決檔案中的所有衝突,然後才能使用您的變更來成功更新提取請求。
-
提取請求會根據您的變更加以更新並變成可合併。您可透過該合併頁面。您可以選擇立即合併提取請求,也可以返回提取請求清單。
解決提取請求中的衝突(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,使用指定的合併策略,測試合併兩個遞交指標的結果。
-
為了探索兩個遞交指標之間的合併有哪些可用的合併選項,請執行 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-specifiermain
--repository-nameMyDemoRepo
如果此命令成功執行,您會看到類似如下的輸出產生:
{ "mergeOptions": [ "FAST_FORWARD_MERGE", "SQUASH_MERGE", "THREE_WAY_MERGE" ], "sourceCommitId": "d49940adEXAMPLE", "destinationCommitId": "86958e0aEXAMPLE", "baseCommitId": "86958e0aEXAMPLE" }
-
-
若要取得包含兩個遞交指標間合併之合併衝突的檔案清單,請執行 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" } } ] }
-
-
若要取得兩個遞交指標之間的合併中,所有檔案或部分檔案之合併衝突的相關資訊,請執行 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-specifiermain
--merge-optionTHREE_WAY_MERGE
--repository-nameMyDemoRepo
如果此命令成功執行,您會看到類似如下的輸出產生:
{ "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" }
-
-
若要取得兩個遞交指標之間的合併中,特定檔案之任何合併衝突的相關資訊,請執行 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-specifiermain
--merge-optionTHREE_WAY_MERGE
--file-pathreadme.md
--repository-nameMyDemoRepo
如果此命令成功執行,您會看到類似如下的輸出產生:
{ "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" }
-
-
若要建立未參照遞交來代表合併兩個遞交指標的結果,請執行 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-specifiermain
--merge-option THREE_WAY_MERGE --repository-nameMyDemoRepo
--name "Maria Garcia" --email "maria_garcia@example.com" --commit-message "Testing the results of this merge."如果此命令成功執行,您會看到類似如下的輸出產生:
{ "commitId": "4f178133EXAMPLE", "treeId": "389765daEXAMPLE" }
-