다음을 통해 공유


병합 충돌 해결

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

병합하거나리베이스할 때, Git에 한 브랜치에서의 변경 내용을 다른 브랜치의 변경 내용과 통합하도록 지시하는 것입니다. Git에서 사용자의 도움 없이 병합을 완료하거나 자동으로 다시베이스하는 경우가 많습니다. 그러나 Git에서 한 분기의 변경 내용이 다른 분기의 변경 내용과 충돌하는 것을 발견하면 충돌을 해결하라는 메시지가 표시됩니다. 병합 충돌은 병합된 분기가 동일한 파일 줄을 다르게 편집하거나 한 분기가 파일을 수정하고 다른 분기에서 파일을 삭제할 때 발생할 수 있습니다. 병합 충돌을 해결하는 프로세스는 Git 병합 및 다시베이스 모두에 적용할 수 있습니다.

Visual Studio에서 또는 명령줄 및 텍스트 편집기를 사용하여 병합 충돌을 해결할 수 있습니다.

Git 워크플로에 대한 개요는 Azure Repos Git 자습서를 참조하세요.

필수 조건

카테고리 요구 사항
프로젝트 액세스 프로젝트멤버입니다.
권한 - 프라이빗 프로젝트에서 코드 보기: 최소 기본 액세스.
- 프라이빗 프로젝트의 코드 복제 또는 기여: 기여자 보안 그룹 또는 프로젝트의 해당 사용 권한의 구성원입니다.
- 분기 또는 리포지토리 사용 권한 설정: 분기 또는 리포지토리에 대한 사용 권한 사용 권한 관리
- 기본 분기 변경: 리포지토리에 대한 정책 편집 권한 설정.
- 리포지토리 가져오기: 프로젝트 관리자 보안 그룹의 구성원이거나, Git 프로젝트 수준에서 리포지토리 만들기 권한이 허용으로 설정된 경우. 자세한 내용은 Git 리포지토리 권한 설정을 참조 하세요.
서비스 리포지토리가 활성화되었습니다.
도구 선택 사항입니다. az repos 명령어를 사용하세요: Azure DevOps CLI.

비고

퍼블릭 프로젝트에서 이해 관계자 액세스 권한이 있는 사용자는 코드 보기, 복제 및 기여를 포함하여 Azure Repos에 대한 모든 권한을 갖습니다.

카테고리 요구 사항
프로젝트 액세스 프로젝트멤버입니다.
권한 - 코드 보기: 최소 베이직 접근 권한.
- 코드 복제 또는 기여: 기여자 보안 그룹의 구성원이거나 프로젝트에서 해당 권한을 가진 경우.
서비스 리포지토리가 활성화되었습니다.

병합 충돌에 대한 이해

Git 병합 또는 리베이스는 소스 분기의 커밋을 현재 로컬 분기(대상 분기)에 통합합니다. Git 병합패스트-포워드 또는 노-패스트-포워드 병합을 수행합니다. 빠른 전달 없음 병합은 3방향 병합 또는 true 병합이라고도 합니다. Git rebase은 병합의 또 다른 유형입니다. 이러한 병합 형식은 다음 다이어그램에 나와 있습니다.

Git 병합 및 Git 다시베이스를 사용할 때 커밋 전후를 보여 주는 다이어그램입니다.

Git 병합의 경우 대상 분기의 끝이 원본 분기 내에 있는 경우 기본 병합 형식은 빠른 전진 병합이 됩니다. 그렇지 않으면 기본 병합 형식은 빠르게 전달되지 않는 병합이 됩니다.

Git는 대상 분기의 끝이 원본 분기와 달라진 경우 빠른 병합을 수행하지 않으므로, fast-forward 병합은 병합 충돌이 발생하지 않습니다. 기본적으로 Git은 가능할 때마다 빠른 전달 병합을 사용합니다. 예를 들어 Git은 원격 대응 분기에서 끌어와서만 업데이트하는 로컬 분기에 빠른 전달 병합을 적용합니다.

fast-forward 없이 병합은 원본 분기 변경 내용을 대상 분기 변경 내용과 통합하는 새 대상 분기 "병합 커밋"을 생성합니다. 적용 가능한 변경 내용은 두 분기 모두에 공통적인 마지막 커밋 후에 적용된 변경 내용입니다. 위의 다이어그램에서 커밋 C는 두 분기에서 마지막으로 공통된 커밋입니다. 원본 분기 변경 내용이 대상 분기 변경과 충돌하는 경우 Git에서 병합 충돌을 해결하라는 메시지를 표시합니다. 병합 커밋(L)에는 통합된 원본 분기 및 대상 분기 변경 내용이 포함됩니다. 소스 및 대상 브랜치 팁(K 및 E)은 병합 커밋의 부모입니다. 귀하의 브랜치 의 커밋 히스토리에서, 병합 커밋은 병합 작업에 유용한 표식이며 어떤 브랜치가 병합되었는지를 명확하게 보여 줍니다.

Git 리베이스는 대상 분기의 커밋 기록을 재배열하여 모든 원본 분기 커밋을 포함한 후에 마지막 공통 커밋 이후의 모든 대상 분기 커밋을 포함하도록 합니다. 위의 다이어그램에서 커밋 C는 두 분기에서 마지막으로 공통된 커밋입니다. 이를 보는 또 다른 방법은 다시베이스가 원본 분기 기록 위에 있는 대상 분기의 변경 내용을 재생하는 것입니다. 원본 분기 변경 내용이 대상 분기 변경과 충돌하는 경우 Git에서 병합 충돌을 해결하라는 메시지를 표시합니다. 빠른 병합과 마찬가지로 재베이스는 병합 커밋을 만들지 않습니다. 특히 재베이스는 기존 대상 분기 커밋의 시퀀스를 변경합니다. 이는 다른 병합 전략의 경우와는 다른 경우입니다. 위의 다이어그램에서 commit K'는 K와 동일한 변경 내용을 포함하지만 C 대신 다시 커밋 E로 연결되므로 새 커밋 ID가 있습니다.

Git 병합 및 다시베이스는 대상 분기만 수정합니다. 원본 분기는 변경되지 않은 상태로 유지됩니다. 하나 이상의 병합 충돌이 발생하면 병합이나 리베이스를 완료하기 위해 충돌을 해결해야 합니다. 또는 병합/다시베이스 작업을 취소하고 대상 분기를 이전 상태로 반환할 수 있습니다.

병합 옵션 및 전략에 대한 자세한 내용은 Git 참조 수동Git 병합 전략참조하세요.

병합 충돌을 해결하는 경우

Git 병합 와 Git 재배치Git 워크플로에서 광범위하게 사용됩니다. 로컬 기능 또는 버그픽스 분기에서 작업하는 경우 다음을 수행하는 것이 일반적입니다.

  1. 로컬 main 분기를 원격 분기와 최신 상태로 유지하려면, 원격 커밋을 가져오고 병합하기 위해 정기적으로 pull 작업을 수행하십시오.
  2. 리베이스 또는 병합을 사용하여 로컬 main 분기 업데이트를 로컬 기능 분기에 통합합니다.
  3. 해당 원격 분기에 푸시하여 로컬 기능 분기에 작업을 백업합니다.
  4. 기능을 완료하면, 원격 기능 브랜치를 원격 브랜치에 병합하기 위한 main를 생성합니다.

원격 변경 내용을 로컬 리포지토리에 자주 통합하면 다른 사용자의 최근 작업을 파악하고 발생하는 병합 충돌을 즉시 해결할 수 있습니다.

병합 충돌 해결

병합 충돌을 해결하는 프로세스는 Git 병합 및 Git 리베이스 모두에 적용할 수 있습니다. 다음 단계에서는 병합 중에 병합 충돌을 해결하는 방법을 설명하지만, 재베이스 중에 병합 충돌을 마찬가지로 해결할 수 있습니다.

팁 (조언)

원본 분기가 원격 추적 분기인 경우 병합 전에 Git 페치 실행하여 분기가 up-to-date인지 확인합니다. 또는 Git fetch와 Git merge를 결합하는 Git pull 명령을 실행합니다.

Visual Studio 2022는 Git 메뉴, Git 변경 내용 및 솔루션 탐색기 상황에 맞는 메뉴를 사용하여 Git 버전 제어 환경을 제공합니다. Visual Studio 2019 버전 16.8은 팀 탐색기 Git 사용자 인터페이스도 제공합니다. 자세한 내용은 Visual Studio 2019 - 팀 탐색기 탭을 참조하세요.

  1. Git 리포지토리 창의 브랜치 창에서 대상 브랜치를 체크아웃하세요. 그런 다음 원본 브랜치를 마우스 오른쪽 버튼으로 클릭하고 원본 브랜치 <을><대상 브랜치>에 병합을 선택합니다.

    Visual Studio의 Git 리포지토리 창에 있는 분기 상황에 맞는 메뉴의 병합 옵션 스크린샷

  2. Visual Studio는 Git이 충돌로 인해 병합을 중지했는지 알려 줍니다. 이 경우 충돌을 해결하거나 병합을 취소하고 병합 전 상태로 돌아갈 수 있습니다. Git 변경 내용 창의 병합되지 않은 변경 사항 섹션에는 병합 충돌이 있는 파일이 나열됩니다. 콘텐츠에서 병합 충돌이 있는 파일의 경우 파일을 두 번 클릭하여 병합 편집기에서 엽니다.

    Visual Studio의 Git 변경 내용 창에서 병합 충돌이 있는 파일의 스크린샷

  3. 병합 편집기에서 들어오는 창에는 원본 분기 파일 버전이 표시되고, 현재 창에는 대상 분기 파일 버전이 표시되고, 결과 창에는 결과 병합 파일이 표시됩니다. 특정 원본 또는 대상 분기 변경 내용을 적용하려면 유지하려는 충돌하는 줄 옆에 있는 확인란을 선택합니다. 결과 창에서 병합 파일을 직접 편집할 수도 있습니다. 현재 파일의 모든 병합 충돌을 해결한 후 병합 수락을 선택합니다. 콘텐츠 충돌이 있는 각 파일에 대해 이 단계를 반복합니다.

    Visual Studio의 병합 편집기 스크린샷

  4. 한 분기에서 편집되고 다른 분기에서 삭제된 파일의 경우 파일을 마우스 오른쪽 단추로 클릭하고 원하는 분기 작업을 선택합니다.

    Visual Studio의 Git 변경 내용 창에서 충돌하는 파일에 대한 상황에 맞는 메뉴의 스크린샷

  5. 모든 파일의 병합 충돌을 해결한 후, Git 변경 내용 창에서 커밋 메시지를 입력한 다음 준비된 커밋을 선택하여 병합을 완료합니다.

    Visual Studio의 Git 변경 내용 창에 있는 커밋 메시지 및 스테이징된 커밋 단추의 스크린샷

다음 단계