git 실수 되돌리기: reset·revert·restore 완벽 정리
잘못 커밋하거나 파일을 날렸을 때 쓰는 git reset, revert, restore의 차이를 상황별로 정리했습니다. 언제 무엇을 써야 하는지 한 번에 이해할 수 있습니다.
안녕하세요. Jay입니다!
git 쓰다가 "앗, 방금 그거 되돌리고 싶다…" 싶었던 순간, 개발하시는 분들은 다들 겪어보셨죠? 그런데 reset, revert, restore가 헷갈려서 잘못 건드렸다가 더 꼬여본 적도 있으실 거예요. (저도 신입 때 reset --hard로 한참 작업한 거 날린 적 있습니다 😂)
오늘은 상황별로 무엇을 써야 하는지, 한 번에 정리해 보겠습니다.
📌 상황별 한눈 정리
| 상황 | 명령어 |
|---|---|
| 아직 커밋 안 한 파일 수정 취소 | git restore <파일> |
| staging(add) 취소 | git restore --staged <파일> |
| 직전 커밋 메시지/내용 수정 | git commit --amend |
| 로컬 커밋 자체를 무르기 | git reset |
| 이미 push한 커밋 되돌리기 | git revert |
1. 아직 커밋 전이라면 — restore
작업하다 망친 파일을 마지막 커밋 상태로 되돌립니다.
git restore src/app.js # 수정 취소
git restore --staged src/app.js # add만 취소 (수정은 유지)
2. 로컬 커밋을 무르고 싶다면 — reset
아직 push하지 않은 커밋에만 쓰세요.
git reset --soft HEAD~1 # 커밋만 취소, 변경사항은 staged로 유지
git reset --mixed HEAD~1 # 커밋·add 취소, 수정 내용은 남김 (기본값)
git reset --hard HEAD~1 # 커밋과 변경사항까지 전부 삭제 (주의!)
--hard는 되돌릴 수 없으니 정말 필요할 때만 쓰시는 걸 추천드려요.
3. 이미 push했다면 — revert
원격에 올라간 커밋을 reset으로 지우면 협업자와 히스토리가 충돌합니다. 대신 그 커밋을 취소하는 새 커밋을 만드는 revert를 쓰세요.
git revert <커밋해시>
히스토리를 지우지 않고 "되돌림"을 기록으로 남기니까 훨씬 안전합니다.
결론
기억할 기준은 딱 한 줄인 것 같습니다.
공유 전(로컬)은
reset으로 깔끔히, 공유 후(push)는revert로 안전하게.
이것만 기억해도 대부분의 실수는 당황하지 않고 수습할 수 있어요. 여러분의 소중한 코드, 안전하게 지키시길 바랍니다! 다음에도 유익한 포스팅으로 찾아오겠습니다. 감사합니다!
#git#개발#버전관리#트러블슈팅