잘못된 브랜치에서 작업했을 때

이럴 때 참고하세요

“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
# 이렇게 하면 잘못된 브랜치에서 작업할 일이 줄어듦

관련 문서

더 알아보기