문제 상황
다른 팀원이 작업한 내용을 PR로 올려서 머지하였고, 그 후 새로운 이슈를 위한 브랜치를 생성하려 했으나, develop 브랜치로 체크아웃할 때 충돌이 발생했다. ㅠㅠ
충돌은 최신 커밋을 기준으로 충돌이 발생이 난다고 생각했는데.....
바로 직전에 머지된 내용과 과거(3~4일 전)에 작업한 내용 간의 충돌이었고 이전 작업들이 병합 편집기에 불러지는 현상이 있었다.
그래서 직전 머지한 내용 이외에도 다른 부분에서 전부 과거내용과 충돌이 일어났다...
해결 상황
어떻게 해결했냐며뉴ㅠ
- Git 로그 확인: git log 명령어로 커밋 로그를 확인했을 때, 로컬의 develop 브랜치가 최신 커밋을 가리키지 않고 있었다.
- 소스 제어 그래프 확인: VS Code의 소스 제어 그래프에서 로컬 develop 브랜치가 한참 아래에 위치해 있는 것을 확인!@ 반면 원격 develop 브랜치는 최신 커밋을 가리키고 있었다.
(파란색이 로컬 develop, 보라색이 원격 develop)
(사진은 로컬 브랜치 옮긴 후: 이렇게 되어있어야 정상 (파란색이 원래 저아래에 있었음)) - 로컬 브랜치 최신 상태로 이동: 최신 커밋으로 develop 브랜치를 이동시키기 위해서
- 먼저, git reset --hard HEAD^1 명령어로 HEAD를 바로 전 커밋으로 이동시켜서 최신 커밋이 맞는지 확인했으나, 여전히 최신 커밋이 아니었따..
- git log로 확인한 가장 최신 커밋의 해시값(예: f3ffd0455b5f40aa3715bed3d7e731344182457b)을 복사하여(git log 말고도 소스제어 그래프에서 최신커밋 오른쪽마우스 누르면 commitID복사 가능_)
git reset --hard 명령어를 통해 강제로 로컬 develop 브랜치를 최신 상태로 이동시켰다.
HEAD is now at ~~ ㅠㅠㅠㅠㅠ 드디어
이렇게해서 로컬 develop을 최신으로 옮겼다! !!!!!!
그래서 충돌도 자동으로 없어졌다.
주의 : --hard 옵션을 사용할 때는 현재 작업 중인 내용이 삭제될 수 있으므로,
반드시 작업 내용을 git stash 명령어를 통해 임시로 저장해 두는 것이 좋다 !!!
알게된 점
이슈단위로 브랜치를 만들어 사용하고있는데
이슈내용이 끝나고 PR 머지까지 완료했으면 더이상 그 브랜치를 사용하지 않는 것을 추천한다.
(나는 브랜치 작업을 develop에 머지하고 develop에서 작업을 확인하거나 수정하면 위험할 수 있다는 생각에 해당 브랜치에서 git pull 해서 머지된 작업을 확인하는데, 이러면 develop에서 문제가 생겼을때 이전 브랜치에서의 작업내용을 확인할 수 없다 그래서 머지하면 브랜치 사용하지않거나 브랜치 정리하기!!!)
실수로 이전 PR 브랜치에서 작업을 시작한 경우,
안전하게 새 브랜치로 작업을 옮기는 방법
PR이 완료된 브랜치에서 실수로 추가 작업을 하게 되었을 때, 작업을 새로운 브랜치로 옮기고, 기존 PR 브랜치에는 영향을 주지 않는 방법입니다.
해결 방법
1. 새로운 브랜치 생성 및 원격 저장소 변경사항 불러오기
- 새 브랜치를 생성하고 원격 저장소의 최신 내용을 가져옵니다.
git fetch origin
2. 변경 사항 임시 저장 (Stash)
- 현재 브랜치의 변경 사항을 임시로 저장합니다. -u 옵션을 사용하면 언트래킹된 파일도 함께 저장됩니다.
git stash -u
3. 새로 생성한 브랜치로 이동
- 새로운 브랜치로 체크아웃합니다.
git checkout <새로 생성한 브랜치 이름>
4. Stash에서 변경 사항 복원
- 새 브랜치에서 stash에 저장된 변경 사항을 복원합니다.
- git stash pop: Stash에 저장된 내용을 현재 브랜치에 복원하고, Stash에서 제거합니다. (기존 PR 브랜치에는 변경 사항이 남지 않습니다.)
- git stash apply: Stash에 저장된 내용을 복원하지만, Stash 목록에서 제거하지 않으므로 기존 브랜치에도 변경 사항이 남습니다.
git stash pop # 기존 브랜치에 변경 사항이 남지 않음
# 또는
git stash apply # Stash 목록에 남아 있음, 기존 브랜치에도 변경 사항 유지
+_++++ 잠시만..;;;
이렇게 해도 해결되는데..
1. 원격 브랜치 업데이트 확인
로컬 저장소가 원격 상태와 싱크되지 않았을 수 있다.
git fetch origin
이후에 다시 git pull origin develop을 실행하여 최신 변경 사항이 있는지 확인
2. 로컬 develop 브랜치 위치 확인
로컬 develop 브랜치가 최신 커밋을 가리키지 않을 수 있다.
git status
git log origin/develop -1
git log develop -1
origin/develop과 develop이 동일한 커밋을 가리키는지 확인
동일하지 않다면 fetch 후 pull을 다시 시도
3. 강제 pull
만약 충돌이 발생하거나 로컬에 수정 사항이 없어도 최신 커밋을 강제로 가져오고 싶다면,
--rebase 또는 --ff-only 옵션을 사용해 강제 pull을 할 수 있
- git pull --rebase origin develop
'🌴트러블슈팅' 카테고리의 다른 글
모바일 PWA 수신안됨 트러블슈팅 (4) | 2025.07.08 |
---|---|
AWS 이미지 url 가져올때 이미지 깨짐 해결 (0) | 2024.12.27 |