병합 충돌
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
병합 충돌은 머지 리퀘스트의 두 브랜치, 즉 소스와 대상에서 동일한 코드 줄에 다른 변경 사항이 있을 때 발생합니다. 충돌이 있는 머지 리퀘스트를 해결하려면 다음 중 하나를 수행해야 합니다: GitLab은 소스 브랜치에서 병합 커밋을 만들어 대상 브랜치에 병합하지 않고 충돌을 해결합니다.
병합 충돌은 머지 리퀘스트의 두 브랜치, 즉 소스와 대상에서 동일한 코드 줄에 다른 변경 사항이 있을 때 발생합니다. 대부분의 경우 GitLab은 변경 사항을 함께 병합할 수 있지만, 충돌이 발생하면 어떤 변경 사항을 유지할지 결정해야 합니다.

충돌이 있는 머지 리퀘스트를 해결하려면 다음 중 하나를 수행해야 합니다:
- 병합 커밋 생성.
- 리베이스를 통해 충돌 해결.
GitLab은 소스 브랜치에서 병합 커밋을 만들어 대상 브랜치에 병합하지 않고 충돌을 해결합니다. 그런 다음 병합 커밋을 검토하고 테스트하여 의도하지 않은 변경 사항이 없고 빌드를 중단시키지 않는지 확인할 수 있습니다.
충돌 블록 이해#
Git이 당신의 결정이 필요한 충돌을 감지하면 충돌 마커로 충돌 블록의 시작과 끝을 표시합니다:
<<<<<<< HEAD는 충돌 블록의 시작을 표시합니다.- 당신의 변경 사항이 표시됩니다.
=======는 당신의 변경 사항의 끝을 표시합니다.- 대상 브랜치의 최신 변경 사항이 표시됩니다.
>>>>>>>는 충돌의 끝을 표시합니다.
충돌을 해결하려면 다음을 삭제합니다:
- 유지하지 않으려는 충돌 줄 버전.
- 세 가지 충돌 마커: 시작, 끝, 두 버전 사이의
=======줄.
UI에서 해결할 수 있는 충돌#
충돌 파일이 다음 조건을 충족하는 경우 GitLab UI에서 병합 충돌을 해결할 수 있습니다:
- 바이너리가 아닌 텍스트 파일.
- 충돌 마커가 추가된 상태에서 200KB 미만.
- UTF-8 호환 인코딩 사용.
- 충돌 마커 없음.
- 두 브랜치에서 동일한 경로에 있음.
파일이 이러한 조건을 충족하지 않으면 충돌을 수동으로 해결해야 합니다.
충돌 해결 방법#
GitLab은 사용자 인터페이스에서 해결 가능한 충돌을 표시하며, 다음 방법을 사용하여 충돌을 해결할 수도 있습니다:
- 인터랙티브 모드: 보관할 줄의 버전만 선택하면 되는 충돌에 가장 적합합니다.
- 인라인 편집기: 변경 사항을 혼합하기 위해 수동으로 편집해야 하는 복잡한 충돌에 적합합니다.
- 명령줄: 복잡한 충돌에 대한 완전한 제어를 제공합니다. 자세한 내용은 명령줄에서 충돌 해결을 참조하세요.
- GitLab Duo: 자동화된 엔드-투-엔드 충돌 해결에 가장 적합합니다.
인터랙티브 모드#
인터랙티브 모드는 선택한 변경 사항으로 대상 브랜치를 소스 브랜치에 병합합니다.
인터랙티브 모드로 병합 충돌을 해결하려면:
- 상단 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 코드 > 머지 리퀘스트를 선택하고 머지 리퀘스트를 찾습니다.
- 개요를 선택하고 머지 리퀘스트 보고서 섹션으로 스크롤합니다.
- 병합 충돌 메시지를 찾고 충돌 해결을 선택합니다. GitLab은 병합 충돌이 있는 파일 목록을 표시합니다. 충돌하는 줄이 강조 표시됩니다.
- 각 충돌에 대해 내 것 사용 또는 상대방 것 사용을 선택하여 보관할 충돌 줄의 버전을 표시합니다. 이 결정을 "충돌 해결"이라고 합니다.
- 모든 충돌을 해결했으면 커밋 메시지를 입력합니다.
- 소스 브랜치에 커밋을 선택합니다.
인라인 편집기#
일부 병합 충돌은 더 복잡하며 해결하기 위해 수동으로 줄을 편집해야 합니다.
병합 충돌 해결 편집기는 GitLab에서 이러한 충돌을 해결하는 데 도움이 됩니다:
-
상단 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
-
왼쪽 사이드바에서 코드 > 머지 리퀘스트를 선택하고 머지 리퀘스트를 찾습니다.
-
개요를 선택하고 머지 리퀘스트 보고서 섹션으로 스크롤합니다.
-
병합 충돌 메시지를 찾고 충돌 해결을 선택합니다. GitLab은 병합 충돌이 있는 파일 목록을 표시합니다.
-
수동으로 편집할 파일을 찾아 충돌 블록으로 스크롤합니다.
-
해당 파일의 헤더에서 인라인 편집을 선택하여 편집기를 엽니다. 이 예에서 충돌 블록은 1350번 줄에서 시작하여 1356번 줄에서 끝납니다:

-
충돌을 해결한 후 커밋 메시지를 입력합니다.
-
소스 브랜치에 커밋을 선택합니다.
GitLab Duo를 사용하여 충돌 해결#
GitLab Duo는 병합 충돌을 자율적으로 분석하고, 충돌 파일을 편집하고, 커밋을 생성하고, 소스 브랜치에 푸시할 수 있습니다.
사전 요구사항:
- Developer, Maintainer 또는 Owner 역할.
- 소스 브랜치에 대한 푸시 접근 권한.
- GitLab Duo Agent Platform 사전 요구사항.
- 베타 및 실험적 기능 활성화.
- 사용자 인터페이스에서 해결할 수 있는 충돌이 있는 머지 리퀘스트.
GitLab Duo를 사용하여 충돌을 해결하려면:
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.
- Overview를 선택합니다.
- 머지 충돌 세부 정보를 찾아 GitLab Duo에게 충돌 해결을 지시합니다:
- 머지 리퀘스트 보고서 섹션에서 충돌 해결을 선택한 다음 GitLab Duo로 해결을 선택합니다.
- 머지 위젯에서 충돌 확인 행을 찾아 GitLab Duo로 해결을 선택합니다.
GitLab Duo는 충돌을 분석하고 해결한 다음 변경 사항을 커밋하고 소스 브랜치에 푸시합니다. 완료되면 GitLab Duo가 머지 리퀘스트에 요약 댓글을 게시합니다.
GitLab Duo는 브랜치 보호 규칙을 준수하며 보호된 브랜치에 강제 푸시하지 않습니다.
리베이스#
머지 리퀘스트가 자동으로 병합할 수 있는 능력 확인 중 메시지와 함께 멈춰 있는 경우 다음을 수행할 수 있습니다:
- 머지 리퀘스트의 댓글에서
/rebase빠른 작업 실행. - 병합 위젯에서 소스 브랜치 리베이스 선택.
- Git으로 리베이스.
CI/CD 파이프라인 문제를 해결하려면 CI/CD 파이프라인 디버깅을 참조하세요.
세미-선형 또는 빠른-순방향 병합 방법을 사용하는 프로젝트의 경우 수동 리베이스 단계를 건너뛰기 위해 병합 전 자동 리베이스를 켤 수 있습니다.
GitLab UI에서 리베이스#
GitLab UI에서 리베이스를 트리거하려면 /rebase 빠른 작업 또는 머지 리퀘스트 위젯의 리베이스 옵션을 사용하세요.
사전 요구사항:
- 병합 충돌이 없어야 합니다.
- 소스 프로젝트에 대해 최소 Developer 역할이 있어야 합니다.
- 머지 리퀘스트가 포크에 있는 경우 포크는 업스트림 프로젝트의 멤버로부터 커밋을 허용해야 합니다.
GitLab UI에서 머지 리퀘스트 브랜치를 리베이스하려면:
- 상단 바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 코드 > 머지 리퀘스트를 선택하고 머지 리퀘스트를 찾습니다.
- 다음 중 하나를 수행합니다:
- 개요 탭에서 머지 리퀘스트 위젯으로 스크롤하고 소스 브랜치 리베이스를 선택합니다.
- 댓글에서
/rebase를 입력하고 댓글을 선택합니다.
GitLab이 기본 브랜치에 대해 브랜치 리베이스를 예약한 다음 실행합니다. GitLab은 완료된 리베이스를 시스템 노트로 표시합니다.
GitLab UI를 통해 만든 커밋에 대해 커밋 서명을 구성한 경우, 웹 커밋은 UI를 통한 리베이스 시 커밋 서명을 잃게 됩니다.
