이전 버전으로 돌아가기
이럴 때 참고하세요
“방금 수정한 거 되돌리고 싶어요” / “예전 버전으로 돌아가고 싶어요”
상황별 빠른 해결
아직 커밋 안 한 변경
# 특정 파일 되돌리기
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 main4. 커밋 취소하기 (push 전)
# 직전 커밋 취소 (변경은 유지)
git reset HEAD~1
# 여러 커밋 취소
git reset HEAD~3
# 변경까지 모두 삭제
git reset --hard HEAD~15. 커밋 되돌리기 (push 후)
# 새 커밋으로 되돌리기
git revert HEAD
# push
git push6. 특정 파일만 과거 버전으로
# 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: 임시 저장"관련 문서
- git restore - 파일 복원
- git reset - 커밋 취소
- git revert - 안전한 되돌리기
- 실수 복구 시나리오 - 더 많은 복구 방법
더 알아보기
- 특정 파일만 되돌리기 - 파일 단위 복원
- push를 취소하고 싶을 때 - push 후 복구