“커밋 잘못했어요. 코드가 다 망가졌어요…”
모든 개발자가 한 번쯤 외치는 말이다.
하지만 걱정할 필요 없다.
Git은 바로 이런 순간을 대비한 되돌리기 기능의 제왕이다.
이번 글에서는 reset / revert / restore 세 가지 명령을 비교하며,
실무에서 어떤 상황에 어떤 명령을 써야 하는지 완벽히 정리한다.
💡 1. Git의 ‘되돌리기’ 개념
Git은 모든 변경 이력을 커밋 단위로 저장한다.
즉, 코드를 실수로 지워도
“그 이전 상태로 돌아갈 수 있는 스냅샷”이 존재한다.
📘 되돌리는 방법은 크게 두 가지다:
구분 방식 설명
| reset / restore | 과거 상태로 ‘돌려버림’ | 기록 자체를 변경 |
| revert | 과거 상태를 ‘새 커밋으로 복원’ | 기록은 유지 |
💬 즉,
- reset = 과거로 시간여행 (이전 커밋으로 덮어쓰기)
- revert = 새로운 커밋으로 “되돌림” 표시
🧱 2. git log로 커밋 확인하기
되돌리기 전, 현재 상태를 먼저 확인해야 한다.
git log --oneline
✅ 예시 출력:
a3f9b1e (HEAD -> main) 잘못된 코드 추가
5f3a1c3 로그인 기능 완료
12a9c8f 초기 커밋
HEAD는 현재 작업 중인 커밋을 가리킨다.
우리가 되돌릴 기준점이 된다.
⚙️ 3. git reset — 과거로 돌아가기
“현재 브랜치를 과거 커밋으로 이동시킨다.”
🔹 기본 사용법
git reset [옵션] <커밋ID>
🔹 주요 옵션 비교
옵션 설명 결과
| --soft | 커밋만 되돌림 (파일은 그대로) | 스테이징 유지 |
| --mixed (기본값) | 커밋 + 스테이징 되돌림 | 수정은 남음 |
| --hard | 모든 것을 완전히 되돌림 | 변경사항 삭제 |
✅ 예시 1: 최근 커밋 되돌리기 (soft)
git reset --soft HEAD~1
→ 마지막 커밋을 취소하고, 변경사항은 그대로 유지됨.
커밋 메시지만 바꾸고 싶을 때 유용하다.
✅ 예시 2: 완전히 되돌리기 (hard)
git reset --hard HEAD~1
→ 코드까지 완전히 과거 상태로 되돌림.
단, 모든 수정 내용이 사라진다.
⚠️ 주의: 팀 협업 중에는 --hard 절대 금지!
(공유된 커밋을 삭제하면 다른 사람 기록까지 꼬인다.)
🔍 4. git revert — 안전하게 과거로 되돌리기
“기존 커밋은 남기고, 되돌리는 커밋을 새로 만든다.”
예시:
git revert a3f9b1e
✅ 결과:
Revert "잘못된 코드 추가"
Git은 자동으로 “되돌림 커밋”을 하나 추가한다.
즉, 이전 기록은 남기되, 결과만 되돌린다.
💡 협업 시에는 항상 revert 사용 권장
→ 충돌 없이 깔끔한 복구 가능
🧩 5. git restore — 파일 단위 되돌리기
“특정 파일만 이전 상태로 복원할 때 사용”
예시:
git restore index.js
✅ 결과
→ index.js가 최근 커밋 상태로 복원된다.
💬 reset은 커밋 단위,
restore는 파일 단위로 이해하면 쉽다.
🧠 6. 실제 실수 복구 시나리오 3가지
🧩 시나리오 1 — 커밋 메시지만 잘못 입력한 경우
git commit --amend -m "올바른 커밋 메시지로 수정"
✅ 커밋 내용은 그대로 두고 메시지만 수정
🧩 시나리오 2 — 커밋은 했는데 아직 푸시 안 함
git reset --soft HEAD~1
✅ 커밋 취소 후 코드 유지
(다시 수정 후 커밋 가능)
🧩 시나리오 3 — 이미 푸시한 커밋을 되돌려야 할 때
git revert <커밋ID>
git push
✅ 안전하게 되돌리기 가능 (기록 보존)
→ 실무에서 가장 많이 사용하는 복구 방식
⚔️ 7. 실수로 파일을 날렸을 때 (복구 꿀팁)
git reflog
✅ 결과:
a3f9b1e HEAD@{0}: commit: 잘못된 코드 추가
12a9c8f HEAD@{1}: commit: 초기 커밋
이 커밋 해시로 돌아가기:
git reset --hard 12a9c8f
💬 reflog는 모든 HEAD 이동 기록을 보여준다.
즉, reset으로 날린 커밋조차 복구 가능하다.
🧩 8. 명령어 비교표로 정리하기
명령어 되돌리는 단위 기록 보존 협업 안전성 주요 용도
| reset | 커밋 | ❌ 삭제됨 | ⚠️ 위험 | 로컬 테스트 되돌리기 |
| revert | 커밋 | ✅ 보존 | ✅ 안전 | 협업 중 복구 |
| restore | 파일 | ✅ 보존 | ✅ 안전 | 특정 파일만 복원 |
💬 기억법
“reset은 되돌리고 잊는다, revert는 되돌리고 기록한다.”
⚡ 9. 실무에서 가장 안전한 되돌리기 규칙
- push 전이라면 → reset --soft
- push 후라면 → revert
- 특정 파일만 복원 → restore
- 중요 작업 전에는 꼭 commit 먼저!
Git은 되돌릴 수 있지만, 커밋하지 않은 것은 되돌릴 수 없다.
🧭 10. 마무리 — “Git의 진짜 힘은 복구력이다”
Git을 배우는 이유는 단순히 저장하기 위해서가 아니다.
**“언제든 되돌릴 수 있기 때문”**이다.
프로젝트가 복잡해질수록
되돌리기 기능은 당신을 구원해줄 안전벨트가 된다.
💬 “Git을 두려워하지 말고, 믿어라.
당신이 실수하더라도 Git은 절대 당신을 버리지 않는다.”
다음 편에서는
✅ 브랜치 전략 (Git Flow vs Trunk Based) 을 통해
팀 단위 협업 구조를 알아보자.
'git' 카테고리의 다른 글
| ⚔️ Git 충돌(conflict) 해결 완벽 가이드 — 진짜 실무에서 겪는 상황별 정리 (0) | 2025.11.04 |
|---|---|
| 🧭 실무 브랜치 전략 완벽 정리 — Git Flow vs Trunk Based (0) | 2025.11.04 |
| ☁️ GitHub로 원격 저장소 연결 및 푸시(push) 완전 정복 (0) | 2025.11.04 |
| 🌿 Git 브랜치 완벽 이해 — 실무 협업의 핵심 개념 (0) | 2025.11.04 |
| ⚙️ Git 기본 설정과 로컬 저장소 만들기 (0) | 2025.11.04 |