어제 오늘 내일

[Git] 커밋을 되돌리고 싶을 때! Reset vs Revert 완벽 정리 본문

IT/Git

[Git] 커밋을 되돌리고 싶을 때! Reset vs Revert 완벽 정리

hi.anna 2026. 3. 6. 07:03

개발을 하다 보면 "아차!" 하는 순간이 찾아옵니다. 잘못된 코드를 커밋했거나, 아예 커밋하기 전으로 시간을 되돌리고 싶을 때가 있죠.

이번 포스팅에서는 Git에서 커밋을 취소하는 두 가지 방법, ResetRevert의 차이와 사용법을 확실하게 정리해 드리겠습니다. 상황에 맞춰 골라 쓰시면 됩니다!

 

 

커밋을 취소하는 방법은 크게 두 가지가 있습니다.

  1. Reset: 시간을 아예 과거로 되돌립니다. (기록이 사라짐)
  2. Revert: 취소했다는 기록을 남기고 되돌립니다. (기록이 남음)

이 두 가지를 언제, 어떻게 써야 하는지 알아볼까요?

 

1. 나 혼자 작업 중일 땐: git reset

reset은 타임머신과 같습니다. 특정 시점(커밋)으로 돌아가고, 그 이후의 역사는 지워버립니다. 혼자 쓰는 브랜치에서 기록을 깔끔하게 만들 때 유용합니다.

돌아가는 방식(옵션)에 따라 작업 내용을 살릴지, 지울지 결정할 수 있습니다.

 

① 커밋만 취소하고 코드는 살리고 싶을 때 (--soft)

방금 한 커밋이 마음에 안 들어서 다시 커밋하고 싶을 때 사용합니다.

$ git reset --soft HEAD~1
  • 상태: 커밋은 사라지지만, 작업했던 파일들은 Staging Area(add 된 상태)에 그대로 남습니다.
  • 활용: 메시지를 고치거나 파일을 조금 더 추가해서 바로 다시 커밋할 때 좋습니다.

 

② 커밋도 취소하고 add도 취소하고 싶을 때 (--mixed)

옵션을 생략하면 기본적으로 이 모드로 동작합니다.

$ git reset HEAD~1
# 또는
$ git reset --mixed HEAD~1
  • 상태: 커밋이 사라지고, 작업했던 파일들은 Unstaged(add 하기 전 상태)로 돌아갑니다.
  • 활용: 작업 내용을 처음부터 다시 검토하거나, 부분적으로만 다시 add 하고 싶을 때 사용합니다.

 

③ 싹 다 지우고 싶을 때 (--hard) (주의!)

가장 강력하면서도 위험한 옵션입니다.

$ git reset --hard HEAD~1
  • 상태: 커밋은 물론, 작업했던 코드까지 모두 사라집니다. 지정한 시점의 상태로 완벽하게 돌아갑니다.
  • 활용: "이번 작업은 완전히 망쳤어! 그냥 전으로 돌아갈래." 할 때만 사용하세요.

 

 

2. 이미 팀원들과 공유했다면: git revert

이미 원격 저장소(GitHub, GitLab 등)에 push를 한 상태라면 reset을 쓰면 안 됩니다. 내 로컬의 history와 원격 저장소의 history가 달라져서 팀원들에게 혼란을 줄 수 있기 때문입니다.

이때는 "이 커밋의 내용을 반대로 수행하는 새 커밋"을 만드는 revert를 사용해야 합니다.

# 취소하고 싶은 커밋의 ID를 입력합니다.
$ git revert <커밋ID>
  • 동작: 기존 커밋 내역은 그대로 두고, 취소 변경 사항이 담긴 새로운 커밋이 추가됩니다.
  • 장점: history를 조작하지 않으므로 협업 시 안전합니다.
  • 단점: 커밋 내역이 지저분해질 수 있습니다.

 

요약

상황 추천 명령어 내 코드(작업물)
방금 커밋했는데 다시 하고 싶음 git reset --soft HEAD~1 유지 (바로 commit 가능)
add 하기 전 상태로 가고 싶음 git reset --mixed HEAD~1 유지 (다시 add 필요)
작업 내용을 싹 날리고 싶음 git reset --hard HEAD~1 삭제 (복구 불가)
이미 GitHub에 올린 커밋 취소 git revert <커밋ID> 유지 (취소 커밋 생성)

 

 

마치며

Git은 생각보다 안전 장치가 많습니다. 실수를 두려워하지 마세요!
오늘 정리해 드린 reset의 3가지 옵션과 revert의 차이점만 기억하신다면, 어떤 상황에서도 당황하지 않고 대처하실 수 있을 겁니다.

 

반응형
Comments