Merge Request(MR) 과정에서 발생하는 **Code Conflict(코드 충돌)**은 협업 개발에서 피할 수 없는 부분입니다. 하지만 이를 효율적으로 해결하는 방법을 잘 알고 있다면, 개발 흐름을 지연시키지 않고 빠르게 작업을 이어갈 수 있습니다. 이번 글에서는 GitLab에서 Merge Request 시 발생하는 코드 충돌의 원인과 이를 해결하는 두 가지 방법에 대해 알아보겠습니다. 먼저 GitLab 웹에서 간편하게 해결하는 방법을 살펴보고, 그다음으로 로컬 환경에서 Git 명령어를 통해 직접 해결하는 방법을 설명하겠습니다.
1. Code Conflict(코드 충돌)이 발생하는 이유
코드 충돌은 여러 개발자가 같은 파일의 동일한 부분을 수정할 때 발생합니다. 특히 Merge Request는 서로 다른 브랜치의 변경 사항을 하나로 합치는 과정이므로, 이 과정에서 서로 다른 코드 변경이 겹치는 경우 Git이 자동으로 병합하지 못하고 충돌이 발생하게 됩니다.
충돌이 발생하는 대표적인 이유는 다음과 같습니다:
- 동일한 파일의 동일한 부분을 여러 명이 수정했을 때
- 한 브랜치에서 파일을 삭제했지만, 다른 브랜치에서 해당 파일을 수정했을 때
- 기본 브랜치(main 또는 master)의 수정사항을 MR 브랜치에 반영하지 않았을 때
이러한 충돌을 해결하지 않고는 Merge Request를 완료할 수 없으며, 충돌을 해결한 후에야 병합이 가능합니다.
2. GitLab 웹에서 충돌 해결하기
GitLab은 웹 인터페이스에서 간편하게 충돌을 해결할 수 있는 기능을 제공합니다. 이 방법은 코드 충돌을 해결하는 데 있어 보다 직관적이며, 빠르게 처리할 수 있는 장점이 있습니다. 다음은 GitLab 웹에서 충돌을 해결하는 단계입니다:
1) Merge Request 화면에서 충돌 확인
Merge Request(MR)를 생성하거나 검토할 때, 충돌이 발생하면 GitLab은 해당 MR 페이지에서 이를 알려줍니다. **"This merge request has conflicts that must be resolved"**라는 메시지를 확인할 수 있습니다.
2) Resolve Conflicts 버튼 클릭
MR 페이지에서 "Resolve conflicts" 버튼을 클릭합니다. 그러면 GitLab이 자동으로 충돌이 발생한 파일을 표시해줍니다.
3) 충돌 파일 검토 및 수정
GitLab 웹 에디터에서 충돌이 발생한 파일을 확인하고, 상단에 표시된 두 브랜치의 변경 사항을 비교합니다. 충돌을 해결하기 위해 필요한 코드를 선택하거나 직접 편집하여 최종 버전을 만듭니다.
4) Resolve 버튼 클릭
충돌을 해결한 후 "Mark as resolved" 버튼을 클릭하여 해결 상태로 표시합니다. 모든 충돌이 해결되면, MR 페이지로 돌아가 Merge를 완료할 수 있습니다.
3. 로컬 환경에서 Git 명령어로 충돌 해결하기
때로는 복잡한 충돌 상황에서 더 세밀한 제어를 하기 위해 로컬 환경에서 작업하는 것이 더 나을 수 있습니다. 로컬 환경에서 Git 명령어를 사용하여 충돌을 해결하는 방법은 다음과 같습니다:
1) 충돌 상황 확인
먼저 로컬로 MR 브랜치와 기본 브랜치를 가져와야 합니다. 아래 명령어로 해당 브랜치들을 확인하고 충돌을 재현할 수 있습니다
git fetch origin
git checkout <MR 브랜치>
git merge origin/<기본 브랜치>
위 명령어로 브랜치를 병합하려고 하면, 충돌이 발생할 경우 "CONFLICT" 메시지와 함께 충돌이 발생한 파일 목록이 출력됩니다.
2) 충돌 파일 수정
충돌이 발생한 파일을 열면 Git은 충돌이 발생한 부분을 다음과 같이 표시합니다
<<<<<<< HEAD
여기에는 기본 브랜치의 코드가 있습니다.
=======
여기에는 MR 브랜치의 코드가 있습니다.
>>>>>>> MR 브랜치 이름
**<<<<<<<, =======, >>>>>>>**로 구분된 부분은 각 브랜치의 충돌 내용을 나타냅니다. 이 구역을 직접 수정하여 최종 코드를 작성해야 합니다.
3) 충돌 해결 후 파일 상태 업데이트
충돌을 모두 해결하고 파일을 저장한 후, Git에게 충돌이 해결되었음을 알리기 위해 다음 명령어를 실행합니다
git add <충돌이 발생한 파일>
4) 병합 완료
모든 충돌을 해결하고 파일 상태를 업데이트했다면, 이제 병합을 완료할 수 있습니다
git commit
이후, 원격 저장소로 푸시하여 병합 요청을 완료합니다
git push origin <MR 브랜치>
4. Code Conflict 방지 팁
코드 충돌을 완전히 방지할 수는 없지만, 그 발생 빈도를 줄일 수 있는 몇 가지 방법이 있습니다:
- 자주 Pull: 로컬 브랜치에서 작업할 때는 자주 기본 브랜치의 최신 변경 사항을 가져와(merge 또는 rebase) 병합 충돌 가능성을 줄입니다.
- 작은 단위의 PR: 작업 크기를 작게 나누어 Merge Request를 자주 올리는 것도 좋은 방법입니다.
- 협업 툴 사용: 작업 내용을 미리 팀과 공유하고, 누가 어떤 부분을 수정하는지 확인하는 것도 충돌을 줄이는 데 큰 도움이 됩니다.
코드 충돌은 협업 개발에서 필연적으로 발생하는 문제이지만, 적절한 도구와 방법을 사용하면 빠르고 쉽게 해결할 수 있습니다. GitLab 웹에서 간단하게 해결하는 방법과 로컬에서 Git 명령어를 사용하는 방법 모두 상황에 따라 유용하게 사용할 수 있습니다. 각자의 작업 환경과 상황에 맞는 방법을 선택하여 충돌을 해결해보세요!
'DevOps' 카테고리의 다른 글
깔끔한 커밋 히스토리를 만드는 방법: Git Squash의 모든 것 (0) | 2024.09.30 |
---|---|
애자일, 스크럼 그리고 칸반: 성공적인 프로젝트 관리의 비밀 (0) | 2024.09.26 |
왜 Git을 선택해야 할까? - 버전 관리의 혁신적인 도구, Git의 특징과 장점 (0) | 2024.09.25 |
GitHub vs GitLab: 무엇을 선택할까? – SaaS와 자체 호스팅 솔루션의 장단점 분석 (0) | 2024.09.25 |
완벽한 협업을 위한 Git 브랜치 전략: Git Flow, GitHub Flow, GitLab Flow 완벽 가이드! (0) | 2024.09.25 |