병합 충돌
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
머지 충돌은 머지 리퀘스트의 두 브랜치, 즉 소스 브랜치와 대상 브랜치가 같은 코드 줄을 서로 다르게 변경했을 때 발생합니다. 충돌이 있는 머지 리퀘스트를 해결하려면 다음 중 하나를 수행해야 합니다. GitLab은 대상 브랜치에 머지하지 않고 소스 브랜치에 머지 커밋을 만들어 충돌을 해결합니다.
머지 충돌은 머지 리퀘스트의 두 브랜치, 즉 소스 브랜치와 대상 브랜치가 같은 코드 줄을 서로 다르게 변경했을 때 발생합니다. 대부분의 경우 GitLab 이 변경 사항을 함께 머지하지만, 충돌이 발생하면 어떤 변경 사항을 남길지 직접 결정해야 합니다.

충돌이 있는 머지 리퀘스트를 해결하려면 다음 중 하나를 수행해야 합니다.
- 머지 커밋을 만듭니다.
- 리베이스로 충돌을 해결합니다.
GitLab은 대상 브랜치에 머지하지 않고 소스 브랜치에 머지 커밋을 만들어 충돌을 해결합니다. 그런 다음 머지 커밋을 검토하고 테스트하여 의도하지 않은 변경 사항이 없는지, 빌드가 깨지지 않는지 확인할 수 있습니다.
충돌 블록 이해#
Git 이 사용자의 판단이 필요한 충돌을 감지하면 충돌 마커로 충돌 블록의 시작과 끝을 표시합니다.
<<<<<<< HEAD는 충돌 블록의 시작을 나타냅니다.- 사용자의 변경 사항이 표시됩니다.
=======는 사용자의 변경 사항이 끝나는 지점을 나타냅니다.- 대상 브랜치의 최신 변경 사항이 표시됩니다.
>>>>>>>는 충돌의 끝을 나타냅니다.
충돌을 해결하려면 다음을 삭제합니다.
- 남기지 않을 충돌 줄 버전
- 충돌 마커 세 개, 즉 시작 마커, 끝 마커, 두 버전 사이의
=======줄
UI에서 해결할 수 있는 충돌#
충돌이 있는 파일이 다음 조건을 충족하면 GitLab UI에서 머지 충돌을 해결할 수 있습니다.
- 바이너리가 아닌 텍스트 파일입니다.
- 충돌 마커를 포함한 크기가 200KB 미만입니다.
- UTF-8 호환 인코딩을 사용합니다.
- 충돌 마커를 포함하고 있지 않습니다.
- 두 브랜치에서 동일한 경로에 존재합니다.
파일이 이 조건을 충족하지 않으면 충돌을 직접 해결해야 합니다.
충돌 해결 방법#
GitLab은 해결할 수 있는 충돌을 UI에 표시하며, 다음 방법으로도 충돌을 해결할 수 있습니다.
- GitLab Duo: 자동으로 처음부터 끝까지 충돌을 해결할 때 적합합니다.
- 인터랙티브 모드: 어떤 버전의 줄을 남길지 선택하기만 하면 되는 충돌에 적합합니다.
- 인라인 편집기: 변경 사항을 섞기 위해 직접 편집해야 하는 복잡한 충돌에 적합합니다.
- 명령줄: 복잡한 충돌을 완전히 제어할 수 있습니다. 자세한 내용은 명령줄에서 충돌 해결을 참고합니다.
GitLab Duo를 사용하여 충돌 해결#
히스토리
GitLab Duo는 머지 충돌을 자율적으로 분석하고 충돌 파일을 편집한 다음, 커밋을 만들어 소스 브랜치에 푸시할 수 있습니다.
사전 요구 사항:
- Developer, Maintainer 또는 Owner 권한이 있어야 합니다.
- 소스 브랜치에 대한 푸시 권한이 있어야 합니다.
- GitLab Duo Agent Platform 필수 요건을 충족해야 합니다.
- 충돌이 UI에서 해결 가능한 머지 리퀘스트여야 합니다.
GitLab Duo로 충돌을 해결하려면 다음 단계를 수행합니다.
- 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.
- Overview를 선택합니다.
- 머지 충돌 세부 정보를 찾아 GitLab Duo에 충돌을 해결하도록 지시합니다.
- 머지 리퀘스트 리포트 섹션에서 Resolve conflicts를 선택한 다음 Resolve with GitLab Duo를 선택합니다.
- 머지 위젯에서 충돌 확인 행을 찾아 Resolve with GitLab Duo를 선택합니다.
GitLab Duo가 충돌을 분석하여 해결하고, 변경 사항을 커밋한 뒤 소스 브랜치에 푸시합니다. 작업이 끝나면 GitLab Duo가 머지 리퀘스트에 요약 댓글을 남깁니다.
GitLab Duo는 브랜치 보호 규칙을 준수하며 보호된 브랜치에 강제 푸시하지 않습니다.
인터랙티브 모드#
인터랙티브 모드는 선택한 변경 사항을 반영하여 대상 브랜치를 소스 브랜치에 머지합니다.
인터랙티브 모드로 머지 충돌을 해결하려면 다음 단계를 수행합니다.
-
상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
-
왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.
-
Overview를 선택하고 머지 리퀘스트 리포트 섹션까지 스크롤합니다.
-
머지 충돌 메시지를 찾아 Resolve conflicts를 선택합니다. GitLab 이 머지 충돌이 있는 파일 목록을 표시합니다. 충돌하는 줄은 강조 표시됩니다.
-
각 충돌에 대해 Use ours 또는 Use theirs를 선택하여 남길 충돌 줄의 버전을 표시합니다. 이 결정을 "충돌 해결" 이라고 합니다.
-
모든 충돌을 해결했으면 Commit message를 입력합니다.
-
Commit to source branch를 선택합니다.
인라인 편집기#
일부 머지 충돌은 더 복잡해서 해결하려면 줄을 직접 편집해야 합니다.
머지 충돌 해결 편집기는 GitLab에서 이러한 충돌을 해결하는 데 도움이 됩니다.
-
상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
-
왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.
-
Overview를 선택하고 머지 리퀘스트 리포트 섹션까지 스크롤합니다.
-
머지 충돌 메시지를 찾아 Resolve conflicts를 선택합니다. GitLab 이 머지 충돌이 있는 파일 목록을 표시합니다.
-
직접 편집할 파일을 찾아 충돌 블록까지 스크롤합니다.
-
해당 파일의 헤더에서 Edit inline을 선택하여 편집기를 엽니다. 다음 예시에서 충돌 블록은 1350번째 줄에서 시작해 1356번째 줄에서 끝납니다.

-
충돌을 해결한 뒤 Commit message를 입력합니다.
-
Commit to source branch를 선택합니다.
리베이스#
머지 리퀘스트가 Checking ability to merge automatically
메시지에서 멈춰 있다면 다음 방법을 사용할 수 있습니다.
- 머지 리퀘스트의 댓글에서
/rebase빠른 작업을 실행합니다. - 머지 위젯에서 Rebase source branch를 선택합니다.
- Git으로 리베이스합니다.
CI/CD 파이프라인 문제를 해결하려면 CI/CD 파이프라인 디버깅을 참고합니다.
세미 리니어 또는 fast-forward 머지 방식을 사용하는 프로젝트에서는 머지 전 자동 리베이스를 켜서 수동 리베이스 단계를 생략할 수도 있습니다.
GitLab UI에서 리베이스#
GitLab UI에서 리베이스를 트리거하려면 /rebase 빠른 작업이나
머지 리퀘스트 위젯의 리베이스 옵션을 사용합니다.
사전 요구 사항:
- 머지 충돌이 없어야 합니다.
- 소스 프로젝트에 대한 최소 Developer 권한이 있어야 합니다.
- 머지 리퀘스트가 포크에 있다면 해당 포크가 업스트림 프로젝트 멤버의 커밋을 허용해야 합니다.
GitLab UI에서 머지 리퀘스트의 브랜치를 리베이스하려면 다음 단계를 수행합니다.
- 상단 표시줄에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Code > Merge requests를 선택하고 머지 리퀘스트를 찾습니다.
- 다음 중 하나를 수행합니다.
- Overview 탭에서 머지 리퀘스트 위젯까지 스크롤한 다음 Rebase source branch를 선택합니다.
- 댓글에
/rebase를 입력하고 Comment를 선택합니다.
GitLab 이 기본 브랜치에 대한 브랜치 리베이스를 예약한 다음 실행합니다. 완료된 리베이스는 시스템 노트로 표시됩니다.
GitLab UI에서 만든 커밋에 커밋 서명을 구성했다면 웹 커밋은 UI에서 리베이스될 때 커밋 서명을 잃습니다.