git

⏪ Git 되돌리기 완벽 정리 — reset, revert, restore 차이 한 번에 이해하기

mirabo01 2025. 11. 4. 22:05

“커밋 잘못했어요. 코드가 다 망가졌어요…”
모든 개발자가 한 번쯤 외치는 말이다.

하지만 걱정할 필요 없다.
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. 실무에서 가장 안전한 되돌리기 규칙

  1. push 전이라면 → reset --soft
  2. push 후라면 → revert
  3. 특정 파일만 복원 → restore
  4. 중요 작업 전에는 꼭 commit 먼저!

Git은 되돌릴 수 있지만, 커밋하지 않은 것은 되돌릴 수 없다.


🧭 10. 마무리 — “Git의 진짜 힘은 복구력이다”

Git을 배우는 이유는 단순히 저장하기 위해서가 아니다.
**“언제든 되돌릴 수 있기 때문”**이다.

프로젝트가 복잡해질수록
되돌리기 기능은 당신을 구원해줄 안전벨트가 된다.

💬 “Git을 두려워하지 말고, 믿어라.
당신이 실수하더라도 Git은 절대 당신을 버리지 않는다.”

다음 편에서는
브랜치 전략 (Git Flow vs Trunk Based) 을 통해
팀 단위 협업 구조를 알아보자.