

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS CodeCommit 리포지토리에서 풀 요청의 충돌 해결
<a name="how-to-resolve-conflict-pull-request"></a>

풀 요청에 충돌이 발생하여 풀 요청을 병합할 수 없는 경우 다음 방법 중 하나를 사용하여 충돌의 해결을 시도할 수 있습니다.
+ 로컬 컴퓨터에서 **git diff** 명령을 사용하여 2개 브랜치 간의 충돌을 확인하고 충돌을 해결하도록 변경할 수 있습니다. 또한 차이점 도구나 기타 소프트웨어를 사용하여 차이점을 확인하고 해결할 수 있습니다. 충돌을 만족할 수 있을 정도로 해결한 후 해결된 충돌을 포함하는 변경 사항으로 소스 브랜치를 푸시할 수 있으며, 풀 요청이 업데이트됩니다. **git diff** 및 **git difftool**에 대한 자세한 내용은 Git 설명서를 참조하세요.
+ 콘솔에서 **충돌 해결**을 선택할 수 있습니다. 이렇게 하면 **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. **리포지토리**에서 리포지토리의 이름을 선택합니다.

1. 탐색 창에서 **풀 요청**을 선택합니다.

1. 기본적으로 모든 미해결 풀 요청 목록이 표시됩니다. 병합하려는 미해결 풀 요청을 선택합니다. 이 요청에는 충돌이 포함되어 있습니다.

1. 풀 요청에서 **충돌 해결**을 선택합니다. 이 옵션은 풀 요청을 병합할 수 있기 전에 해결해야 할 충돌이 있는 경우에만 나타납니다.  
![풀 요청을 병합할 수 있기 전에 해결해야 할 충돌이 있음을 보여주는 풀 요청.](http://docs.aws.amazon.com/ko_kr/codecommit/latest/userguide/images/codecommit-pull-request-resolve-conflicts.png)

1. 충돌 해결 창이 해결해야 할 충돌이 있는 각 파일 목록을 엽니다. 목록에서 충돌을 검토할 각 파일을 선택하고 모든 충돌이 해결될 때까지 필요한 변경을 실시합니다.  
![아직 해결되지 않은 충돌이 있는 파일을 보여주는 충돌 해결 편집기.](http://docs.aws.amazon.com/ko_kr/codecommit/latest/userguide/images/codecommit-pull-request-resolve.png)
   + 소스 파일 콘텐츠, 대상 파일 콘텐츠를 사용하도록 선택하거나 파일이 이진 파일이 아닌 경우 원하는 변경 사항만 포함되도록 파일의 콘텐츠를 수동으로 편집하도록 선택할 수 있습니다. 표준 git 차이점 마커는 파일의 대상(HEAD) 브랜치와 소스 브랜치 간의 충돌을 표시하는 데 사용됩니다.
   + 파일이 이진 파일, Git 하위 모듈이거나 파일/폴더 이름 충돌이 있는 경우 충돌을 해결하기 위해 소스 파일 또는 대상 파일을 사용하도록 선택해야 합니다. CodeCommit 콘솔에서는 이진 파일을 보거나 편집할 수 없습니다.
   + 파일 모드 충돌이 있는 경우 소스 파일의 파일 모드와 대상 파일의 파일 모드 중에서 선택하여 충돌을 해결하는 옵션이 표시됩니다.
   + 파일의 변경 사항을 폐기하고 파일을 충돌 상태로 복원하려면 **파일 재설정**을 선택합니다. 이렇게 하면 다른 방법으로 충돌을 해결할 수 있습니다.

1. 변경 사항에 만족하면 **풀 요청 업데이트**를 선택합니다.
**참고**  
변경 사항으로 풀 요청을 성공적으로 업데이트할 수 있기 전에 모든 파일의 모든 충돌을 해결해야 합니다.

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**를 사용하여 2개 커밋 지정자 간의 병합에 사용 가능한 병합 옵션을 알아볼 수 있습니다.
+ **get-merge-conflicts**를 사용하여 2개 커밋 지정자 간의 병합에서 병합 충돌이 있는 파일 목록을 반환할 수 있습니다.
+ **batch-describe-merge-conflicts**를 사용하여, 지정된 병합 전략을 사용하는 2개 커밋 간의 병합에서 파일의 모든 병합 충돌에 대한 정보를 얻을 수 있습니다.
+ **describe-merge-conflicts**를 사용하여, 지정된 병합 전략을 사용하는 2개 커밋 간의 특정 파일의 병합 충돌에 대한 세부 정보를 얻을 수 있습니다.
+ **create-unreferenced-merge-commit**를 사용하여, 지정된 병합 전략을 사용하는 2개 커밋 지정자의 병합 결과를 테스트할 수 있습니다.

1. <a name="get-merge-options"></a>2개 커밋 지정자 간의 병합에 사용 가능한 병합 옵션을 확인하려면 다음을 지정하여 **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>2개 커밋 지정자 간의 병합에서 병합 충돌을 포함하는 파일 목록을 얻으려면 다음을 지정하여 **get-merge-conflicts** 명령을 실행합니다.
   + 병합 소스의 커밋 지정자(**--source-commit-specifier** 옵션 사용).
   + 병합 대상의 커밋 지정자(**--destination-commit-specifier** 옵션 사용).
   + 리포지토리의 이름(**--repository-name** 옵션 사용).
   + 사용하려는 병합 옵션(**--merge-option** 옵션 사용).
   + (선택 사항) 충돌에 대해 원하는 세부 사항 수준(**--conflict-detail-level** 옵션 사용).
   + (선택 사항) 사용하려는 충돌 해결 전략(**--conflict-resolution-strategy** 옵션 사용).
   + (선택 사항) 반환할 충돌이 있는 파일의 최대 수(**--max-conflict-files** 옵션 사용).

   예를 들어 MyDemoRepo라는 리포지토리에서 three-way merge(삼방향 병합 전략)을 사용하여 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>2개 커밋 지정자 간의 병합에서 모든 파일 또는 파일 하위 집합의 병합 충돌에 대한 정보를 얻으려면 다음을 지정하여 **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\_WAY\_MERGE)}} 전략을 활용하여 {{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>2개 커밋 지정자 간의 병합에서 특정 파일의 병합 충돌에 대한 세부 정보를 얻으려면 다음을 지정하여 **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\_WAY\_MERGE)}} 전략을 활용하여 {{feature-randomizationfeature}}라는 소스 브랜치와 main이라는 대상 브랜치에 있는 {{readme.md}}라는 파일을 병합할 때 발생하는 충돌을 확인하려면, 다음과 같이 합니다. {{}} 

   ```
   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>2개 커밋 지정자의 병합 결과를 나타내는 참조되지 않은 커밋을 생성하려면 다음을 지정하여 **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\_SOURCE) 전략을 사용하여 {{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"
   }
   ```