본문 바로가기
개발/개발 필기

Git 브랜치 충돌 해결: Main에 Develop 강제로 덮어씌우는 방법

by nicksoon 2024. 11. 15.
반응형

프로젝트를 진행하다 보면 브랜치 간 병합 과정에서 충돌이 발생할 수 있습니다. 특히, 서로 다른 히스토리를 가진 main과 develop 브랜치를 병합하려다 모든 파일에 충돌이 발생하는 상황은 골치 아픈 문제입니다.

 

제가 이번에 작업을 하면서 신규로 개발된 develop 브랜치에 main 브랜치와 병합을 하다가 발생한 문제, 해결 방법으로 main 브랜치에 develop 브랜치의 코드를 강제로 덮어씌우는 과정을 단계별로 정리해 보겠습니다.

 


상황 설명

1. 일반적으로 main에 develop을 병합하려 했습니다

main 브랜치에서 develop 브랜치를 병합하려는 상황이라. 일반적으로 다음 명령어를 실행했을 것입니다:

git checkout main
git merge develop

하지만 두 브랜치가 유지보수와 신규개발을 하면서 독립적인 히스토리를 가지고 있거나 코드 구조가 크게 달라 모든 파일에서 충돌이 발생을 했습니다.

 

2. main의 모든 파일에서 충돌 (<<<<< HEAD) 발생

병합 중 모든 파일에서 다음과 같은 충돌 표시가 나타납니다:

<<<<<<< HEAD
(현재 main 브랜치의 코드)
=======
(develop 브랜치의 코드)
>>>>>>> develop

이는 main과 develop의 코드가 서로 다른 내용으로 인식되어 Git이 자동으로 병합하지 못했음을 의미합니다.


3. 병합을 임시로 중단

충돌 상황에서 직접 파일을 하나씩 수정하지 않고, 병합을 중단하기로 결정했습니다.

그리고 다음 명령어를 사용해 병합 상태를 초기화했습니다:

git merge --abort

이 명령어는 현재 진행 중이던 병합을 완전히 취소하고, main 브랜치의 상태를 병합 이전으로 되돌립니다.


4. develop의 내용을 main에 강제로 덮어씌우기

main 브랜치를 완전히 초기화하고, develop 브랜치의 내용을 강제로 덮어씌우기 위해 아래 단계를 수행했습니다.


해결 방법: develop 브랜치를 main에 강제로 덮어씌우기

1. develop 브랜치로 이동

우선 develop 브랜치로 이동해 병합할 코드를 확인합니다. 프로그램이 정상적으로 동작을 하는지 이상을 없는지 마지막 코드가 맞는지 확인을 해 줘야 합니다 (저는 이 때 .env 파일이 없어져서 놀랐어요 )

git checkout develop

 

2. main 브랜치로 이동

다시 main 브랜치로 이동합니다.

git checkout main

 

3. main 브랜치 초기화 (develop으로 강제 덮어씌우기)

git reset --hard develop

이 명령은 main 브랜치의 내용을 develop 브랜치의 커밋 상태로 완전히 덮어씌웁니다.

 

4. 원격 저장소에 강제 푸시

main 브랜치를 덮어쓴 내용을 원격 저장소에도 반영하기 위해 강제로 푸시합니다:

git push origin main --force

 

결과

  • main 브랜치의 모든 내용이 develop 브랜치와 동일하게 변경되었습니다.
  • 더 이상 충돌 수정 없이 develop의 코드가 그대로 main에 반영됩니다.

 

주의사항

1. 강제 푸시(--force) 사용 주의
강제 푸시는 기존 히스토리를 완전히 덮어씌우므로 팀원들과 협의 후 진행하세요. 잘못하면 다른 사람이 작업 중인 브랜치에 영향을 미칠 수 있습니다.

2. 백업 추천
중요한 브랜치를 수정하기 전에는 항상 백업 브랜치를 만들어둡니다:

 
git branch backup-main main

 

3. 충돌의 원인 분석
이번에는 강제로 병합했지만, 근본적으로 병합 충돌의 원인을 분석해 브랜치 관리 전략을 개선하는 것이 중요합니다.

 

마무리

이번 포스트에서는 main과 develop 브랜치 간 병합 충돌 상황을 해결하기 위해 develop 브랜치의 내용을 main 브랜치에 강제로 덮어씌우는 방법을 알아보았습니다. 이러한 상황은 종종 발생할 수 있으므로, 병합 전 브랜치 상태를 항상 확인하고 적절한 전략으로 관리하는 것이 좋습니다.

 

저도 너무 당황스럽고 왜? 그래도 main에서 부터 develop이 브랜치를 생성을 했는데 왜? 하면서 당황을 했지만 그래도 강제로 하는 것이 있을 거란 생각에 찾아 하나하나씩 해봤습니다.

 

문제가 발생했을 때 당황하지 말고, 차근차근 해결해 보세요! 😊

반응형