InfoGrab DocsInfoGrab Docs

병합 충돌

요약

머지 충돌은 머지 리퀘스트의 두 브랜치, 즉 소스 브랜치와 대상 브랜치가 같은 코드 줄을 서로 다르게 변경했을 때 발생합니다. 충돌이 있는 머지 리퀘스트를 해결하려면 다음 중 하나를 수행해야 합니다. GitLab은 대상 브랜치에 머지하지 않고 소스 브랜치에 머지 커밋을 만들어 충돌을 해결합니다.

머지 충돌은 머지 리퀘스트의 두 브랜치, 즉 소스 브랜치와 대상 브랜치가 같은 코드 줄을 서로 다르게 변경했을 때 발생합니다. 대부분의 경우 GitLab 이 변경 사항을 함께 머지하지만, 충돌이 발생하면 어떤 변경 사항을 남길지 직접 결정해야 합니다.

머지 충돌로 차단된 머지 리퀘스트

충돌이 있는 머지 리퀘스트를 해결하려면 다음 중 하나를 수행해야 합니다.

  • 머지 커밋을 만듭니다.
  • 리베이스로 충돌을 해결합니다.

GitLab은 대상 브랜치에 머지하지 않고 소스 브랜치에 머지 커밋을 만들어 충돌을 해결합니다. 그런 다음 머지 커밋을 검토하고 테스트하여 의도하지 않은 변경 사항이 없는지, 빌드가 깨지지 않는지 확인할 수 있습니다.

충돌 블록 이해#

Git 이 사용자의 판단이 필요한 충돌을 감지하면 충돌 마커로 충돌 블록의 시작과 끝을 표시합니다.

  • <<<<<<< HEAD는 충돌 블록의 시작을 나타냅니다.
  • 사용자의 변경 사항이 표시됩니다.
  • =======는 사용자의 변경 사항이 끝나는 지점을 나타냅니다.
  • 대상 브랜치의 최신 변경 사항이 표시됩니다.
  • >>>>>>>는 충돌의 끝을 나타냅니다.

충돌을 해결하려면 다음을 삭제합니다.

  1. 남기지 않을 충돌 줄 버전
  2. 충돌 마커 세 개, 즉 시작 마커, 끝 마커, 두 버전 사이의 ======= 줄

UI에서 해결할 수 있는 충돌#

충돌이 있는 파일이 다음 조건을 충족하면 GitLab UI에서 머지 충돌을 해결할 수 있습니다.

  • 바이너리가 아닌 텍스트 파일입니다.
  • 충돌 마커를 포함한 크기가 200KB 미만입니다.
  • UTF-8 호환 인코딩을 사용합니다.
  • 충돌 마커를 포함하고 있지 않습니다.
  • 두 브랜치에서 동일한 경로에 존재합니다.

파일이 이 조건을 충족하지 않으면 충돌을 직접 해결해야 합니다.

충돌 해결 방법#

GitLab은 해결할 수 있는 충돌을 UI에 표시하며, 다음 방법으로도 충돌을 해결할 수 있습니다.

  • GitLab Duo: 자동으로 처음부터 끝까지 충돌을 해결할 때 적합합니다.
  • 인터랙티브 모드: 어떤 버전의 줄을 남길지 선택하기만 하면 되는 충돌에 적합합니다.
  • 인라인 편집기: 변경 사항을 섞기 위해 직접 편집해야 하는 복잡한 충돌에 적합합니다.
  • 명령줄: 복잡한 충돌을 완전히 제어할 수 있습니다. 자세한 내용은 명령줄에서 충돌 해결을 참고합니다.

GitLab Duo를 사용하여 충돌 해결#

히스토리
  • GitLab 19.0에서 mr_ai_resolve_conflicts라는
  • GitLab 19.3에서 일반 공개됨.
  • GitLab 19.4에서 기능 플래그 mr_ai_resolve_conflicts가 제거됨.

GitLab Duo는 머지 충돌을 자율적으로 분석하고 충돌 파일을 편집한 다음, 커밋을 만들어 소스 브랜치에 푸시할 수 있습니다.

사전 요구 사항:

GitLab Duo로 충돌을 해결하려면 다음 단계를 수행합니다.

  1. 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.
  3. Overview를 선택합니다.
  4. 머지 충돌 세부 정보를 찾아 GitLab Duo에 충돌을 해결하도록 지시합니다.
    • 머지 리퀘스트 리포트 섹션에서 Resolve conflicts를 선택한 다음 Resolve with GitLab Duo를 선택합니다.
    • 머지 위젯에서 충돌 확인 행을 찾아 Resolve with GitLab Duo를 선택합니다.

GitLab Duo가 충돌을 분석하여 해결하고, 변경 사항을 커밋한 뒤 소스 브랜치에 푸시합니다. 작업이 끝나면 GitLab Duo가 머지 리퀘스트에 요약 댓글을 남깁니다.

GitLab Duo는 브랜치 보호 규칙을 준수하며 보호된 브랜치에 강제 푸시하지 않습니다.

인터랙티브 모드#

인터랙티브 모드는 선택한 변경 사항을 반영하여 대상 브랜치를 소스 브랜치에 머지합니다.

인터랙티브 모드로 머지 충돌을 해결하려면 다음 단계를 수행합니다.

  1. 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.

  3. Overview를 선택하고 머지 리퀘스트 리포트 섹션까지 스크롤합니다.

  4. 머지 충돌 메시지를 찾아 Resolve conflicts를 선택합니다. GitLab 이 머지 충돌이 있는 파일 목록을 표시합니다. 충돌하는 줄은 강조 표시됩니다.

  5. 각 충돌에 대해 Use ours 또는 Use theirs를 선택하여 남길 충돌 줄의 버전을 표시합니다. 이 결정을 "충돌 해결" 이라고 합니다.

  6. 모든 충돌을 해결했으면 Commit message를 입력합니다.

  7. Commit to source branch를 선택합니다.

인라인 편집기#

일부 머지 충돌은 더 복잡해서 해결하려면 줄을 직접 편집해야 합니다.

머지 충돌 해결 편집기는 GitLab에서 이러한 충돌을 해결하는 데 도움이 됩니다.

  1. 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.

  3. Overview를 선택하고 머지 리퀘스트 리포트 섹션까지 스크롤합니다.

  4. 머지 충돌 메시지를 찾아 Resolve conflicts를 선택합니다. GitLab 이 머지 충돌이 있는 파일 목록을 표시합니다.

  5. 직접 편집할 파일을 찾아 충돌 블록까지 스크롤합니다.

  6. 해당 파일의 헤더에서 Edit inline을 선택하여 편집기를 엽니다. 다음 예시에서 충돌 블록은 1350번째 줄에서 시작해 1356번째 줄에서 끝납니다.

    머지 충돌 편집기

  7. 충돌을 해결한 뒤 Commit message를 입력합니다.

  8. Commit to source branch를 선택합니다.

리베이스#

머지 리퀘스트가 Checking ability to merge automatically 메시지에서 멈춰 있다면 다음 방법을 사용할 수 있습니다.

CI/CD 파이프라인 문제를 해결하려면 CI/CD 파이프라인 디버깅을 참고합니다.

세미 리니어 또는 fast-forward 머지 방식을 사용하는 프로젝트에서는 머지 전 자동 리베이스를 켜서 수동 리베이스 단계를 생략할 수도 있습니다.

GitLab UI에서 리베이스#

GitLab UI에서 리베이스를 트리거하려면 /rebase 빠른 작업이나 머지 리퀘스트 위젯의 리베이스 옵션을 사용합니다.

사전 요구 사항:

GitLab UI에서 머지 리퀘스트의 브랜치를 리베이스하려면 다음 단계를 수행합니다.

  1. 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.
  3. 다음 중 하나를 수행합니다.
    • Overview 탭에서 머지 리퀘스트 위젯까지 스크롤한 다음 Rebase source branch를 선택합니다.
    • 댓글에 /rebase를 입력하고 Comment를 선택합니다.

GitLab 이 기본 브랜치에 대한 브랜치 리베이스를 예약한 다음 실행합니다. 완료된 리베이스는 시스템 노트로 표시됩니다.

Note

GitLab UI에서 만든 커밋에 커밋 서명을 구성했다면 웹 커밋은 UI에서 리베이스될 때 커밋 서명을 잃습니다.

관련 주제#

병합 충돌

GitLab v19.5
Tier: Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

머지 충돌은 머지 리퀘스트의 두 브랜치, 즉 소스 브랜치와 대상 브랜치가 같은 코드 줄을 서로 다르게 변경했을 때 발생합니다. 충돌이 있는 머지 리퀘스트를 해결하려면 다음 중 하나를 수행해야 합니다. GitLab은 대상 브랜치에 머지하지 않고 소스 브랜치에 머지 커밋을 만들어 충돌을 해결합니다.

머지 충돌은 머지 리퀘스트의 두 브랜치, 즉 소스 브랜치와 대상 브랜치가 같은 코드 줄을 서로 다르게 변경했을 때 발생합니다. 대부분의 경우 GitLab 이 변경 사항을 함께 머지하지만, 충돌이 발생하면 어떤 변경 사항을 남길지 직접 결정해야 합니다.

머지 충돌로 차단된 머지 리퀘스트

충돌이 있는 머지 리퀘스트를 해결하려면 다음 중 하나를 수행해야 합니다.

  • 머지 커밋을 만듭니다.
  • 리베이스로 충돌을 해결합니다.

GitLab은 대상 브랜치에 머지하지 않고 소스 브랜치에 머지 커밋을 만들어 충돌을 해결합니다. 그런 다음 머지 커밋을 검토하고 테스트하여 의도하지 않은 변경 사항이 없는지, 빌드가 깨지지 않는지 확인할 수 있습니다.

충돌 블록 이해#

Git 이 사용자의 판단이 필요한 충돌을 감지하면 충돌 마커로 충돌 블록의 시작과 끝을 표시합니다.

  • <<<<<<< HEAD는 충돌 블록의 시작을 나타냅니다.
  • 사용자의 변경 사항이 표시됩니다.
  • =======는 사용자의 변경 사항이 끝나는 지점을 나타냅니다.
  • 대상 브랜치의 최신 변경 사항이 표시됩니다.
  • >>>>>>>는 충돌의 끝을 나타냅니다.

충돌을 해결하려면 다음을 삭제합니다.

  1. 남기지 않을 충돌 줄 버전
  2. 충돌 마커 세 개, 즉 시작 마커, 끝 마커, 두 버전 사이의 ======= 줄

UI에서 해결할 수 있는 충돌#

충돌이 있는 파일이 다음 조건을 충족하면 GitLab UI에서 머지 충돌을 해결할 수 있습니다.

  • 바이너리가 아닌 텍스트 파일입니다.
  • 충돌 마커를 포함한 크기가 200KB 미만입니다.
  • UTF-8 호환 인코딩을 사용합니다.
  • 충돌 마커를 포함하고 있지 않습니다.
  • 두 브랜치에서 동일한 경로에 존재합니다.

파일이 이 조건을 충족하지 않으면 충돌을 직접 해결해야 합니다.

충돌 해결 방법#

GitLab은 해결할 수 있는 충돌을 UI에 표시하며, 다음 방법으로도 충돌을 해결할 수 있습니다.

  • GitLab Duo: 자동으로 처음부터 끝까지 충돌을 해결할 때 적합합니다.
  • 인터랙티브 모드: 어떤 버전의 줄을 남길지 선택하기만 하면 되는 충돌에 적합합니다.
  • 인라인 편집기: 변경 사항을 섞기 위해 직접 편집해야 하는 복잡한 충돌에 적합합니다.
  • 명령줄: 복잡한 충돌을 완전히 제어할 수 있습니다. 자세한 내용은 명령줄에서 충돌 해결을 참고합니다.

GitLab Duo를 사용하여 충돌 해결#

히스토리
  • GitLab 19.0에서 mr_ai_resolve_conflicts라는
  • GitLab 19.3에서 일반 공개됨.
  • GitLab 19.4에서 기능 플래그 mr_ai_resolve_conflicts가 제거됨.

GitLab Duo는 머지 충돌을 자율적으로 분석하고 충돌 파일을 편집한 다음, 커밋을 만들어 소스 브랜치에 푸시할 수 있습니다.

사전 요구 사항:

GitLab Duo로 충돌을 해결하려면 다음 단계를 수행합니다.

  1. 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.
  3. Overview를 선택합니다.
  4. 머지 충돌 세부 정보를 찾아 GitLab Duo에 충돌을 해결하도록 지시합니다.
    • 머지 리퀘스트 리포트 섹션에서 Resolve conflicts를 선택한 다음 Resolve with GitLab Duo를 선택합니다.
    • 머지 위젯에서 충돌 확인 행을 찾아 Resolve with GitLab Duo를 선택합니다.

GitLab Duo가 충돌을 분석하여 해결하고, 변경 사항을 커밋한 뒤 소스 브랜치에 푸시합니다. 작업이 끝나면 GitLab Duo가 머지 리퀘스트에 요약 댓글을 남깁니다.

GitLab Duo는 브랜치 보호 규칙을 준수하며 보호된 브랜치에 강제 푸시하지 않습니다.

인터랙티브 모드#

인터랙티브 모드는 선택한 변경 사항을 반영하여 대상 브랜치를 소스 브랜치에 머지합니다.

인터랙티브 모드로 머지 충돌을 해결하려면 다음 단계를 수행합니다.

  1. 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.

  3. Overview를 선택하고 머지 리퀘스트 리포트 섹션까지 스크롤합니다.

  4. 머지 충돌 메시지를 찾아 Resolve conflicts를 선택합니다. GitLab 이 머지 충돌이 있는 파일 목록을 표시합니다. 충돌하는 줄은 강조 표시됩니다.

  5. 각 충돌에 대해 Use ours 또는 Use theirs를 선택하여 남길 충돌 줄의 버전을 표시합니다. 이 결정을 "충돌 해결" 이라고 합니다.

  6. 모든 충돌을 해결했으면 Commit message를 입력합니다.

  7. Commit to source branch를 선택합니다.

인라인 편집기#

일부 머지 충돌은 더 복잡해서 해결하려면 줄을 직접 편집해야 합니다.

머지 충돌 해결 편집기는 GitLab에서 이러한 충돌을 해결하는 데 도움이 됩니다.

  1. 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  2. 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.

  3. Overview를 선택하고 머지 리퀘스트 리포트 섹션까지 스크롤합니다.

  4. 머지 충돌 메시지를 찾아 Resolve conflicts를 선택합니다. GitLab 이 머지 충돌이 있는 파일 목록을 표시합니다.

  5. 직접 편집할 파일을 찾아 충돌 블록까지 스크롤합니다.

  6. 해당 파일의 헤더에서 Edit inline을 선택하여 편집기를 엽니다. 다음 예시에서 충돌 블록은 1350번째 줄에서 시작해 1356번째 줄에서 끝납니다.

    머지 충돌 편집기

  7. 충돌을 해결한 뒤 Commit message를 입력합니다.

  8. Commit to source branch를 선택합니다.

리베이스#

머지 리퀘스트가 Checking ability to merge automatically 메시지에서 멈춰 있다면 다음 방법을 사용할 수 있습니다.

CI/CD 파이프라인 문제를 해결하려면 CI/CD 파이프라인 디버깅을 참고합니다.

세미 리니어 또는 fast-forward 머지 방식을 사용하는 프로젝트에서는 머지 전 자동 리베이스를 켜서 수동 리베이스 단계를 생략할 수도 있습니다.

GitLab UI에서 리베이스#

GitLab UI에서 리베이스를 트리거하려면 /rebase 빠른 작업이나 머지 리퀘스트 위젯의 리베이스 옵션을 사용합니다.

사전 요구 사항:

GitLab UI에서 머지 리퀘스트의 브랜치를 리베이스하려면 다음 단계를 수행합니다.

  1. 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
  2. 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.
  3. 다음 중 하나를 수행합니다.
    • Overview 탭에서 머지 리퀘스트 위젯까지 스크롤한 다음 Rebase source branch를 선택합니다.
    • 댓글에 /rebase를 입력하고 Comment를 선택합니다.

GitLab 이 기본 브랜치에 대한 브랜치 리베이스를 예약한 다음 실행합니다. 완료된 리베이스는 시스템 노트로 표시됩니다.

Note

GitLab UI에서 만든 커밋에 커밋 서명을 구성했다면 웹 커밋은 UI에서 리베이스될 때 커밋 서명을 잃습니다.

관련 주제#