잘못된 브랜치에서 작업했을 때
이럴 때 참고하세요
“feature 브랜치에서 작업해야 하는데 main에서 작업해버렸어요”
상황별 빠른 해결
아직 커밋 안 함
git stash
git switch 올바른-브랜치
git stash pop커밋은 했지만 push 안 함
# 방법 1: reset + stash
git reset --soft HEAD~1
git stash
git switch 올바른-브랜치
git stash pop
git commit -m "메시지"
# 방법 2: cherry-pick
git switch 올바른-브랜치
git cherry-pick 커밋ID
git switch 잘못된-브랜치
git reset --hard HEAD~1상세 가이드
상황 1: 커밋하지 않은 변경사항
증상: 코드를 수정했는데 브랜치가 main이었다
# 현재 상태 확인
$ git status
On branch main ← 잘못된 브랜치!
Changes not staged for commit:
modified: app.js해결:
# 1. 변경사항 임시 저장
git stash
# 2. 올바른 브랜치로 이동
git switch feature/my-work
# 3. 변경사항 복원
git stash pop
# 4. 정상적으로 커밋
git add .
git commit -m "feat: 작업 내용"상황 2: 커밋까지 한 경우 (push 전)
증상: main에서 커밋해버렸다
$ git log --oneline -3
a1b2c3d (HEAD -> main) feat: 잘못 커밋한 것
9x8y7z6 이전 커밋해결 방법 A: reset + stash
# 1. 커밋 취소 (변경사항은 유지)
git reset --soft HEAD~1
# 2. 임시 저장
git stash
# 3. 올바른 브랜치로 이동 (없으면 생성)
git switch -c feature/my-work
# 4. 변경사항 복원
git stash pop
# 5. 다시 커밋
git add .
git commit -m "feat: 작업 내용"해결 방법 B: cherry-pick
# 1. 커밋 ID 기억
git log -1 --oneline
# a1b2c3d feat: 잘못 커밋한 것
# 2. 올바른 브랜치로 이동
git switch feature/my-work
# 3. 커밋 가져오기
git cherry-pick a1b2c3d
# 4. 잘못된 브랜치의 커밋 삭제
git switch main
git reset --hard HEAD~1상황 3: 여러 개의 커밋을 잘못함
$ git log --oneline -4
a1b2c3d feat: 세 번째 잘못된 커밋
9x8y7z6 feat: 두 번째 잘못된 커밋
5w4v3u2 feat: 첫 번째 잘못된 커밋
1t0s9r8 마지막 정상 커밋해결:
# 1. 올바른 브랜치로 이동
git switch -c feature/my-work
# 2. 모든 커밋 가져오기 (범위로)
git cherry-pick 5w4v3u2..a1b2c3d
# 3. main에서 커밋들 삭제
git switch main
git reset --hard 1t0s9r8상황 4: 이미 push한 경우
주의
push한 커밋은 히스토리 변경에 주의가 필요합니다.
개인 브랜치라면:
# 위의 방법 실행 후
git push -f origin main협업 브랜치라면:
# revert로 안전하게 되돌리기
git switch main
git revert HEAD
git push
# 올바른 브랜치에서 다시 작업
git switch feature/my-work
git cherry-pick 원래커밋ID
git push origin feature/my-work브랜치 전환 시 문제
변경사항이 있어서 전환 불가
$ git switch feature
error: Your local changes would be overwritten해결:
# 방법 1: stash
git stash
git switch feature
git stash pop
# 방법 2: 커밋
git commit -am "WIP: 임시 저장"
git switch feature예방 팁
작업 전 브랜치 확인
# 현재 브랜치 확인
git branch
# 또는 프롬프트에 브랜치 표시 (설정)
# PS1에 git branch 추가브랜치 생성과 동시에 전환
# 새 작업 시작할 때
git switch -c feature/new-work
# 이렇게 하면 잘못된 브랜치에서 작업할 일이 줄어듦관련 문서
- Branch란 - 브랜치 개념
- git reset - 커밋 취소
- git stash - 임시 저장
- git checkout과 switch - 브랜치 전환
더 알아보기
- 실수 복구 시나리오 - 다양한 복구 방법