git 충돌 - 트러블 슈팅

2024. 11. 12. 12:05·🌴트러블슈팅

문제 상황

다른 팀원이 작업한 내용을 PR로 올려서 머지하였고, 그 후 새로운 이슈를 위한 브랜치를 생성하려 했으나, develop 브랜치로 체크아웃할 때 충돌이 발생했다. ㅠㅠ

충돌은 최신 커밋을 기준으로 충돌이 발생이 난다고 생각했는데.....
바로 직전에 머지된 내용과 과거(3~4일 전)에 작업한 내용 간의 충돌이었고 이전 작업들이 병합 편집기에 불러지는 현상이 있었다.

그래서 직전 머지한 내용 이외에도 다른 부분에서 전부 과거내용과 충돌이 일어났다...

해결 상황

어떻게 해결했냐며뉴ㅠ

  1. Git 로그 확인: git log 명령어로 커밋 로그를 확인했을 때, 로컬의 develop 브랜치가 최신 커밋을 가리키지 않고 있었다.
  2. 소스 제어 그래프 확인: VS Code의 소스 제어 그래프에서 로컬 develop 브랜치가 한참 아래에 위치해 있는 것을 확인!@ 반면 원격 develop 브랜치는 최신 커밋을 가리키고 있었다.
    (파란색이 로컬 develop, 보라색이 원격 develop)

    (사진은 로컬 브랜치 옮긴 후: 이렇게 되어있어야 정상 (파란색이 원래 저아래에 있었음))
  3. 로컬 브랜치 최신 상태로 이동: 최신 커밋으로 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
'🌴트러블슈팅' 카테고리의 다른 글
  • 모바일 PWA 수신안됨 트러블슈팅
  • AWS 이미지 url 가져올때 이미지 깨짐 해결
gprorogpfus
gprorogpfus
:- >
  • gprorogpfus
    gpfusdldks
    gprorogpfus
  • 전체
    오늘
    어제
    • 분류 전체보기 (56) N
      • 🎭JavaScript (3) N
      • 👚 CSS (1)
      • ⚛️ React (13)
      • 🌃 Next.js (5)
        • 🔜 next.js-study (3)
      • 🥏TypeScript (10)
      • 🏴알고리즘 (2)
      • 🌴트러블슈팅 (3)
      • ⛲ 프로젝트 (6)
        • 👖gproro-shop-app (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JavaScript
    react
    TypeScript
    GIT
    Redux
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gprorogpfus
git 충돌 - 트러블 슈팅
상단으로

티스토리툴바