Git에서 작업을 하다 보면 커밋을 잘못했거나, 실수로 원격 저장소(GitHub 등)에 푸시(Push)까지 해버린 경우가 종종 있습니다. 상황별로 가장 적절한 취소 방법

Git에서 작업을 하다 보면 커밋을 잘못했거나, 실수로 원격 저장소(GitHub 등)에 푸시(Push)까지 해버린 경우가 종종 있습니다. 상황별로 가장 적절한 취소 방법을 정리해 드립니다.


1. Local에서 commit만 취소하고 싶을 때 (아직 Push 안 함)

가장 많이 사용하는 명령어는 git reset 입니다. 취소 후 변경 사항(코드)을 남길지 여부에 따라 옵션이 나뉩니다.

1) 코드는 살리고, Staging Area(add 상태)로 되돌리기 (추천)

방금 한 커밋을 취소하고, 파일들은 git add 된 상태로 유지합니다. (커밋 메시지만 다시 쓰거나 파일 하나를 더 추가해서 다시 커밋할 때 유용)

Bash

git reset --soft HEAD^

2) 코드는 살리고, Unstaged 상태로 되돌리기 (기본값)

방금 한 커밋을 취소하고, git add 하기 전 상태로 되돌립니다.

Bash

git reset --mixed HEAD^
# 또는 옵션 생략 가능
git reset HEAD^

3) 코드까지 싹 다 날리기 (주의)

방금 한 커밋을 취소하고, 작업했던 코드 내용도 모두 삭제하여 커밋 전 상태로 완전히 되돌립니다. (복구 불가)

Bash

git reset --hard HEAD^

HEAD^는 바로 이전 커밋(가장 최신)을 의미합니다.


2. 이미 Remote에 push까지 한 경우

원격 저장소에 올라간 내용을 취소하는 방법은 크게 두 가지가 있습니다. 협업 중이라면 방법 1을 강력 추천합니다.

방법 1: git revert 사용 (안전한 방법, 협업 시 추천)

잘못된 커밋 내용을 반대로 수행하는 새로운 커밋을 생성합니다. 기존 히스토리를 삭제하지 않으므로 팀원들과 충돌이 나지 않습니다.

  1. Revert 실행 (취소하고 싶은 커밋으로 되돌리는 커밋 생성)

    Bash

    # 가장 최근 커밋을 취소하고 싶을 때
    git revert HEAD
    
    # 특정 커밋을 취소하고 싶을 때 (Hash값 사용)
    git revert <Commit ID>
  2. 원격 저장소 반영

    Bash

    git push origin <branch_name>

    결과: “실수했던 커밋” -> “실수를 취소하는 커밋” 순으로 이력이 남습니다.

방법 2: git reset + 강제 푸시 (위험, 혼자 쓸 때만 추천)

로컬에서 커밋을 없애버린 후, 원격 저장소에 이를 강제로 덮어씌웁니다. 다른 팀원이 이미 Pull을 받았다면 코드가 꼬일 수 있습니다.

  1. 로컬에서 커밋 취소 (Hard 옵션 사용 시 코드도 삭제됨 주의)

    Bash

    git reset --hard HEAD^
  2. 강제 푸시 (Force Push)

    Bash

    git push origin <branch_name> -f

    결과: 원격 저장소에서 해당 커밋이 아예 사라집니다.


3. 꿀팁: 커밋 메시지만 수정하고 싶을 때

Git에서 작업을 하다 보면 커밋을 잘못했거나, 실수로 원격 저장소(GitHub 등)에 푸시(Push)까지 해버린 경우가 종종 있습니다. 상황별로 가장 적절한 취소 방법

아직 Push 하지 않았는데 오타를 수정하거나 파일을 하나 빼먹어서 다시 커밋하고 싶다면, 굳이 취소할 필요 없이 덮어쓰기가 가능합니다.

Bash

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 이력 삭제하고 덮어쓰기