문제 상황
feature 브랜치에서 작업이 진행되었고, develop 브랜치에 머지하려고 할 때 컨플릭트 발생
아래와 같은 브랜치 상태에서 develop 브랜치로 변경하려고 하니 변경 사항이 겹쳐서 checkout이 막힌 상황이었다.
A --- B --- C --- D --- E --- F --- G (develop, old)
\
X --- Y --- Z (feature/chat-list, new)
- develop 브랜치는 기존 G 커밋에서 멈춰 있었고,
- feature/chat-list 브랜치에서 X, Y, Z 커밋이 추가됨
- develop 브랜치로 이동하려고 했지만 변경 사항이 겹쳐버려 컨플릭트가 발생했다.
- 이때 강제로 develop 브랜치를 feature/chat-list와 동일하게 만들고 싶었다.
오류 메시지
error: Your local changes to the following files would be overwritten by checkout:
apps/sample/pubspec.lock
Please commit your changes or stash them before you switch branches.
Aborting
현재 변경된 파일이 존재하여 컨플릭트가 나는 바람에 develop 브랜치로 이동할 수 없다며 에러문구가 떴다.
해결 방법
방법 1: 기존 develop 변경 사항을 버리고 feature/chat-list와 동일하게 만들기
git checkout develop # develop 브랜치로 이동
기존 develop 브랜치의 변경 사항(E, F, G)을 완전히 무시하고, feature/chat-list와 동일하게 만든다.
git reset --hard
만약 이동이 불가능하면 아래 명령어로 강제로 변경 사항을 삭제하고 이동한다.
git reset --hard feature/chat-list
이제 develop 브랜치를 feature/chat-list와 동일하게 덮어쓴다. 그리고 원격 저장소에도 강제로 적용한다.
git push origin develop --force
이렇게 하면 develop 브랜치는 feature/chat-list와 동일한 상태가 되며, 기존의 develop 변경 사항(E, F, G)은 사라진다.
방법 2: 기존 develop 변경 사항(E, F, G)도 반영하면서 feature/chat-list를 병합하기
git checkout develop
git merge feature/chat-list
기존 develop 브랜치에서 진행된 변경 사항을 유지하면서 feature/chat-list의 변경 사항을 반영하려면 merge를 사용한다.
git add . # 충돌 해결 후 변경 사항 스테이징
git commit -m "Merge feature/chat-list into develop with previous changes" # 병합 완료 후 커밋
이 과정에서 충돌(conflict)이 발생할 수 있으므로 git status를 확인하고, 필요하면 수동으로 해결한 후 커밋한다.
원격 브랜치에도 강제 적용
만약 원격 저장소에도 이 변경 사항을 반영하려면 다음 명령어를 실행한다.
git push origin develop --force
⚠️ --force 옵션을 사용할 경우 기존 develop 브랜치의 히스토리가 덮어씌워지므로 주의!
해결 후 브랜치 상태
방법 1 적용 후 (feature/chat-list와 동일하게 덮어쓰기)
A --- B --- C --- D --- E --- F --- G (old develop, 삭제되었음)
\
X --- Y --- Z (new develop)
이제 develop 브랜치는 feature/chat-list와 완전히 동일해졌다.
방법 2 적용 후 (develop 변경 사항도 유지하면서 병합)
A --- B --- C --- D --- E --- F G develop (merged)
| |
X --- Y --- Z (feature/chat-list changes merged)
이제 develop 브랜치는 feature/chat-list의 변경 사항을 포함하면서도, 기존 develop의 변경 사항(E, F, G)도 유지된 상태가 되었다.
- 기존 develop 변경 사항을 버리고 싶다면? git reset --hard feature/chat-list
- 기존 develop 변경 사항을 유지하면서 병합하려면? (수동으로 컨플리트 처리후) git merge feature/chat-list
'Infra' 카테고리의 다른 글
Web Socket 서버를 로드밸런싱 할 때 Sticky Session 대신 사용하는 3가지 방법 (0) | 2025.01.26 |
---|---|
서버를 옮겼더니 젠킨스 접속 속도가 느려진 이슈 트러블 슈팅 (0) | 2025.01.24 |
Jenkins가 Flutter 경로를 찾지 못해 발생한 이슈 트러블 슈팅 (0) | 2025.01.23 |
오픈소스 클라우드 인프라 관리 플랫폼 OpenStack 알아보기 (0) | 2024.11.08 |
ESXi와 vCenter를 활용한 온프레미스 인프라 구축 (0) | 2024.11.08 |