C

git 커밋 되돌리기: reset와 revert 차이와 정확한 사용법

2026-05-04 · Git · 도구 · 버전관리 · 문제해결

git 커밋 되돌리기, 왜 reset와 revert가 헷갈릴까

커밋을 잘못 했을 때 가장 먼저 검색하는 키워드가 "git 커밋 되돌리기"입니다. 그런데 막상 찾아보면 git resetgit revert 두 가지가 나와서 어떤 걸 써야 할지 혼란스럽습니다. 결론부터 말하면, 혼자 작업 중이고 아직 push하지 않았다면 reset, 이미 push했거나 협업 중이라면 revert입니다. 이 둘의 차이를 정확히 이해하면 실수를 깔끔하게 수습할 수 있습니다.

증상: 이런 상황일 겁니다

  • 방금 한 커밋 메시지를 잘못 적었다
  • 커밋에 포함하면 안 될 파일이 들어갔다
  • 며칠 전 커밋이 버그를 만들었는데 그 커밋만 없애고 싶다

reset와 revert의 핵심 차이

구분git resetgit revert
동작 방식커밋 히스토리를 과거로 되돌림(삭제)되돌리는 "새 커밋"을 추가
히스토리지워짐(이력이 사라짐)그대로 남음(안전)
push 이후위험(강제 push 필요)안전
적합한 상황로컬, push 전 정리협업, push 후 되돌리기

해결 1: 마지막 커밋만 취소하기 (reset)

아직 push하지 않은 가장 최근 커밋을 취소하는 경우입니다. 변경 내용을 어떻게 처리할지에 따라 옵션이 다릅니다.

# 커밋만 취소하고 변경 내용은 스테이징 상태로 유지
git reset --soft HEAD~1

# 커밋과 스테이징을 취소하고 작업 내용은 그대로 보존 (가장 많이 씀)
git reset --mixed HEAD~1

# 커밋과 변경 내용을 모두 삭제 (위험: 작업이 사라짐)
git reset --hard HEAD~1

경고: --hard는 작업 파일까지 되돌려 복구가 어렵습니다. 정말 변경 내용을 버릴 때만 사용하세요. 옵션을 생략하면 --mixed가 기본값입니다.

커밋 메시지만 고치고 싶다면

되돌릴 필요 없이 메시지만 수정하면 됩니다.

git commit --amend -m "올바른 커밋 메시지"

해결 2: 특정 커밋만 되돌리기 (revert)

이미 push했거나, 중간 커밋 하나만 무효화하고 싶을 때 사용합니다. 히스토리를 지우지 않고 "반대 동작" 커밋을 새로 만듭니다.

# 되돌릴 커밋 해시 확인
git log --oneline

# 특정 커밋을 되돌리는 새 커밋 생성
git revert a1b2c3d

# 여러 커밋을 한 번에 되돌리기
git revert HEAD~2..HEAD

revert는 협업 중에도 안전합니다. 다른 사람이 받은 히스토리를 망가뜨리지 않기 때문입니다.

해결 3: 이미 push한 커밋을 reset로 되돌렸다면

혼자 쓰는 브랜치라면 강제 push가 가능하지만 주의가 필요합니다.

git reset --hard HEAD~1
git push --force-with-lease origin main

경고: --force 대신 --force-with-lease를 쓰세요. 다른 사람이 그 사이 push했다면 덮어쓰기를 막아줍니다. 공유 브랜치(main 등)에서 강제 push는 협업자의 히스토리를 깨뜨리니 가급적 revert를 쓰세요.

주의점 정리

  • push 전 = reset, push 후 = revert가 기본 원칙
  • reset --hard는 작업 내용을 삭제하므로 신중히
  • 실수로 reset 했어도 git reflog로 복구 가능한 경우가 많습니다
# reset로 사라진 커밋 찾기
git reflog
git reset --hard a1b2c3d  # reflog에서 본 복구 지점

자주 묻는 질문

Q1. reset --soft와 --mixed의 차이가 뭔가요?

둘 다 커밋을 취소하지만, --soft는 변경 내용을 스테이징(git add 된) 상태로 남기고, --mixed는 스테이징도 해제해 작업 디렉터리에만 남깁니다. 커밋을 다시 묶고 싶으면 soft, 스테이징부터 다시 하고 싶으면 mixed를 쓰세요.

Q2. revert하면 변경 내용이 두 번 나오는데 괜찮나요?

정상입니다. revert는 원래 커밋과 그것을 취소하는 커밋이 모두 히스토리에 남습니다. 이게 협업에서 안전한 이유이며, "누가 언제 무엇을 되돌렸는지" 추적할 수 있게 해줍니다.

Q3. reset --hard로 날린 작업을 정말 복구할 수 있나요?

커밋된 상태였다면 git reflog에 해당 시점이 기록되어 있어 복구 가능성이 높습니다. 다만 커밋하지 않은 변경(아직 add/commit 안 한 파일)은 reflog에도 남지 않아 복구가 어렵습니다. 그래서 위험한 명령 전에는 임시 커밋을 해두는 습관이 좋습니다.

git 커밋 되돌리기: reset와 revert 차이와 정확한 사용법 | CodeMaster 블로그 | CodeMaster