Git을 사용하다 보면 터미널에 붉은색 fatal, error 메시지가 뜨며 작업이 가로막히는 순간이 있습니다. 프롬프트 상의 브랜치 표시(branch-name) $를 확인하며 구글링 없이 1분 만에 탈출하는 응급 처치법입니다.
상황 1: "브랜치를 바꾸려는데 파일이 덮어쓰여진다고 거부할 때"
(feature/order) $ git switch develop
error: Your local changes to the following files would be overwritten by checkout:
app/Http/Controllers/OrderController.php
Please commit your changes or stash them before you switch branches.
Aborting해결법
# 1. 작업 중인 내용 서랍에 임시 보관
(feature/order) $ git stash push -u -m "WIP"
# 2. 원하는 브랜치로 이동
(feature/order) $ git switch develop
Switched to branch 'develop'
(develop) $
# 3. 나중에 원래 브랜치로 돌아와서 복원
(develop) $ git switch feature/order
(feature/order) $ git stash pop상황 2: "HEAD detached at ... (유령 상태)"
((a8f9e01...) detached HEAD) $ git status
HEAD detached at a8f9e01해결법: 현재 detached 상태에서 만든 작업을 새 정식 브랜치로 구출하기
((a8f9e01...) detached HEAD) $ git switch -c rescue-my-work
Switched to a new branch 'rescue-my-work'
# 정식 브랜치로 복구 완료!
(rescue-my-work) $ 상황 3: "fatal: refusing to merge unrelated histories"
(main) $ git pull origin main --allow-unrelated-histories상황 4: ".gitignore에 넣었는데도 계속 Git에 잡힐 때"
# 로컬 파일은 보존하면서 Git 캐시 추적만 제거
(develop) $ git rm --cached app/Config/secret.json
(develop) $ git commit -m "chore: .gitignore 캐시 갱신"상황 5: "Push Rejected (non-fast-forward)"
# 안전하게 최신 원격 커밋 뒤로 내 작업 이어붙이기
(develop) $ git pull --rebase origin develop
(develop) $ git push origin develop