Merge 충돌, 해결과 예방
**충돌(Conflict)**은 두 브랜치가 같은 파일의 같은 부분을 서로 다르게 고쳤을 때 발생합니다. Git이 "둘 중 뭘 써야 할지 모르겠다"고 판단해서 사람에게 판단을 넘기는 것이죠. 충돌 부분은 다음과 같은 마커로 표시됩니다.
<<<<<<< HEAD
print("1mo")
=======
print("hello")
>>>>>>> test/branch1해결 방법 두 가지
① GitHub UI의 Resolve conflicts 버튼 버튼을 누르면 4가지 선택지가 생깁니다: 현재 브랜치 내용 쓰기 / 가져오는 브랜치 내용 쓰기 / 둘 다 쓰기 / 직접 수정하기. 해결 후 Mark as resolved → Commit merge 순서로 진행합니다.
② 로컬에서 해결하기 GitHub UI는 IDE 지원이 없어서 복잡한 충돌엔 위험할 수 있습니다. 이럴 땐 로컬에서 직접 해결하는 게 안전합니다.
git checkout test/branch1
git merge main
# 충돌 마커를 직접 열어서 수정
git add .
git commit
git pushVS Code 최신 버전에는 Resolve in Merge Editor 버튼이 있어서, 왼쪽(incoming)/오른쪽(current)/결과(아래)를 한 화면에서 비교하며 수정할 수 있습니다. 편하긴 하지만 본질은 텍스트를 직접 고치는 것과 같습니다.
충돌을 아예 줄이는 방법
- 최신 코드 유지: 개발 기간이 길어질수록 메인 브랜치와의 차이가 벌어집니다. 매일 아침처럼 정기적으로
git merge로 최신 코드를 당겨오는 루틴을 만들어두면 충돌이 크게 줄어듭니다. - 작은 PR 만들기: PR이 작을수록 변경 범위가 좁아 충돌 가능성과 해결 난이도가 함께 줄어듭니다. (다만 소프트웨어 구조가 잘 나뉘어 있어야 가능한 방법입니다.)
- 파일을 작게 쪼개기: 충돌은 파일 단위로 발생합니다. 관계없는 함수들이 한 파일에 몰려 있으면, 서로 다른 브랜치가 파일 끝에 각자 함수를 추가하다가 "의미 없는" 순서 충돌이 생기기 쉽습니다. 파일을 목적별로 쪼개면 이런 충돌 자체가 줄어듭니다.
- 동료와 커뮤니케이션하기: 기술력만큼 중요한 게 소통입니다. 서로 밀접하지 않은 기능부터 우선순위를 나눠 작업하면 자연스럽게 충돌이 줄어듭니다.
출처: Codyssey-B1/B2-2