Git에서 작업을 하다 보면 커밋을 잘못했거나, 실수로 원격 저장소(GitHub 등)에 푸시(Push)까지 해버린 경우가 종종 있습니다. 상황별로 가장 적절한 취소 방법을 정리해 드립니다.
1. Local에서 commit만 취소하고 싶을 때 (아직 Push 안 함)
가장 많이 사용하는 명령어는 git reset 입니다. 취소 후 변경 사항(코드)을 남길지 여부에 따라 옵션이 나뉩니다.
1) 코드는 살리고, Staging Area(add 상태)로 되돌리기 (추천)
방금 한 커밋을 취소하고, 파일들은 git add 된 상태로 유지합니다. (커밋 메시지만 다시 쓰거나 파일 하나를 더 추가해서 다시 커밋할 때 유용)
git reset --soft HEAD^
2) 코드는 살리고, Unstaged 상태로 되돌리기 (기본값)
방금 한 커밋을 취소하고, git add 하기 전 상태로 되돌립니다.
git reset --mixed HEAD^
# 또는 옵션 생략 가능
git reset HEAD^
3) 코드까지 싹 다 날리기 (주의)
방금 한 커밋을 취소하고, 작업했던 코드 내용도 모두 삭제하여 커밋 전 상태로 완전히 되돌립니다. (복구 불가)
git reset --hard HEAD^
HEAD^는 바로 이전 커밋(가장 최신)을 의미합니다.
2. 이미 Remote에 push까지 한 경우
원격 저장소에 올라간 내용을 취소하는 방법은 크게 두 가지가 있습니다. 협업 중이라면 방법 1을 강력 추천합니다.
방법 1: git revert 사용 (안전한 방법, 협업 시 추천)
잘못된 커밋 내용을 반대로 수행하는 새로운 커밋을 생성합니다. 기존 히스토리를 삭제하지 않으므로 팀원들과 충돌이 나지 않습니다.
-
Revert 실행 (취소하고 싶은 커밋으로 되돌리는 커밋 생성)
Bash# 가장 최근 커밋을 취소하고 싶을 때 git revert HEAD # 특정 커밋을 취소하고 싶을 때 (Hash값 사용) git revert <Commit ID> -
원격 저장소 반영
Bashgit push origin <branch_name>결과: “실수했던 커밋” -> “실수를 취소하는 커밋” 순으로 이력이 남습니다.
방법 2: git reset + 강제 푸시 (위험, 혼자 쓸 때만 추천)
로컬에서 커밋을 없애버린 후, 원격 저장소에 이를 강제로 덮어씌웁니다. 다른 팀원이 이미 Pull을 받았다면 코드가 꼬일 수 있습니다.
-
로컬에서 커밋 취소 (Hard 옵션 사용 시 코드도 삭제됨 주의)
Bashgit reset --hard HEAD^ -
강제 푸시 (Force Push)
Bashgit push origin <branch_name> -f결과: 원격 저장소에서 해당 커밋이 아예 사라집니다.
3. 꿀팁: 커밋 메시지만 수정하고 싶을 때

아직 Push 하지 않았는데 오타를 수정하거나 파일을 하나 빼먹어서 다시 커밋하고 싶다면, 굳이 취소할 필요 없이 덮어쓰기가 가능합니다.
git add . # (파일을 추가해야 한다면 추가 후)
git commit --amend
이 명령어를 입력하면 에디터가 열리며 커밋 메시지를 수정할 수 있고, 저장하면 기존 커밋을 덮어씁니다.
요약 표
| 상황 | 명령어 | 코드 상태 |
| Commit 취소 (유지) | git reset –soft HEAD^ | add 된 상태로 유지 |
| Commit 취소 (해제) | git reset HEAD^ | add 전 상태로 유지 |
| Commit 취소 (삭제) | git reset –hard HEAD^ | 코드 삭제됨 |
| Push 취소 (협업) | git revert HEAD 후 push | 취소 이력 남기고 복구 |
| Push 취소 (개인) | git reset 후 push -f | 이력 삭제하고 덮어쓰기 |