이전 버전으로 돌아가기

이럴 때 참고하세요

“방금 수정한 거 되돌리고 싶어요” / “예전 버전으로 돌아가고 싶어요”

상황별 빠른 해결

아직 커밋 안 한 변경

# 특정 파일 되돌리기
git restore app.js
 
# 모든 변경 되돌리기
git restore .

커밋은 했지만 push 안 함

# 커밋 취소 (변경사항 유지)
git reset HEAD~1
 
# 커밋 완전 취소
git reset --hard HEAD~1

이미 push 함

# 새 커밋으로 되돌리기
git revert HEAD
git push

상세 가이드

1. 파일 수정 취소하기

아직 Stage에 올리지 않은 변경 취소:

# 현재 상태
$ git status
Changes not staged for commit:
        modified:   app.js
 
# 수정 취소
$ git restore app.js
 
# 확인
$ git status
nothing to commit, working tree clean

주의

수정한 내용이 완전히 사라집니다. 복구할 수 없습니다.

2. Stage 취소하기

add한 것을 취소 (변경은 유지):

# Stage에서 내리기
git restore --staged app.js
 
# 상태 확인
$ git status
Changes not staged for commit:
        modified:   app.js    # 변경은 그대로

3. 특정 커밋 시점 보기

과거 커밋을 확인만 하고 싶을 때:

# 커밋 목록 확인
git log --oneline
 
# 특정 커밋으로 이동 (Detached HEAD)
git checkout a1b2c3d
 
# 다시 돌아오기
git switch main

4. 커밋 취소하기 (push 전)

# 직전 커밋 취소 (변경은 유지)
git reset HEAD~1
 
# 여러 커밋 취소
git reset HEAD~3
 
# 변경까지 모두 삭제
git reset --hard HEAD~1

5. 커밋 되돌리기 (push 후)

# 새 커밋으로 되돌리기
git revert HEAD
 
# push
git push

6. 특정 파일만 과거 버전으로

# 2단계 이전 커밋의 app.js 가져오기
git restore --source HEAD~2 app.js
 
# 특정 커밋에서 가져오기
git restore --source a1b2c3d app.js

결정 흐름도

되돌리고 싶다
    │
    ├─ 커밋 안 함
    │       │
    │       ├─ Stage에 있음? → git restore --staged
    │       └─ Stage에 없음? → git restore
    │
    ├─ 커밋했지만 push 안 함
    │       │
    │       ├─ 변경 유지? → git reset HEAD~1
    │       └─ 변경 삭제? → git reset --hard HEAD~1
    │
    └─ 이미 push 함
            └─ git revert

자주 하는 실수

reset 후 push 거부

$ git push
! [rejected] main -> main (non-fast-forward)

원인: 로컬과 원격 히스토리가 달라짐

해결:

  • 개인 브랜치: git push -f
  • 협업 브랜치: git revert 사용

restore로 삭제한 변경 복구

복구할 수 없습니다. 예방하세요:

# 중요한 변경은 먼저 stash
git stash
 
# 또는 커밋해두기
git commit -m "WIP: 임시 저장"

관련 문서

더 알아보기