C

git add 취소와 커밋 취소하는 법: 상황별 정확한 명령어

2026-06-02 · Git · 도구 · 버전관리 · 문제해결

git add 취소와 커밋 취소, 무엇이 다른가

입문자가 자주 헷갈리는 두 가지가 git add 취소(스테이징 해제)와 커밋 취소입니다. 둘은 단계가 다릅니다. git add는 파일을 "커밋 대기열(스테이징)"에 올리는 동작이고, git commit은 그 대기열을 확정해 이력으로 남기는 동작입니다. 따라서 어느 단계까지 진행했느냐에 따라 취소 명령이 다릅니다. 이 글에서 git add 취소와 커밋 취소를 상황별로 정확히 정리합니다.

현재 상태 먼저 확인

git status

"Changes to be committed"에 있으면 add된 상태, 그 위 커밋까지 했다면 커밋 취소가 필요합니다.

해결 1: git add 취소하기 (스테이징 해제)

add는 했지만 아직 commit 전인 상태입니다. 작업 내용은 그대로 두고 스테이징만 풉니다.

# 특정 파일만 스테이징 해제
git restore --staged app.js

# 모든 파일 스테이징 해제
git restore --staged .

구버전 Git에서는 같은 동작을 이렇게 합니다.

git reset HEAD app.js

두 명령 모두 파일 내용은 건드리지 않고 스테이징만 해제하므로 안전합니다.

해결 2: 마지막 커밋 취소하기

commit까지 했지만 아직 push 전이라면 git reset으로 커밋을 되돌립니다. 작업 내용 보존 여부에 따라 옵션이 다릅니다.

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

# 커밋과 스테이징 취소, 작업 내용은 보존 (가장 무난)
git reset HEAD~1

# 커밋과 변경 내용까지 모두 삭제 (위험)
git reset --hard HEAD~1

경고: --hard는 작업 파일까지 되돌려 복구가 어렵습니다. 변경을 정말 버릴 때만 쓰세요.

명령커밋스테이징작업 파일
reset --soft취소유지유지
reset (mixed)취소해제유지
reset --hard취소해제삭제

해결 3: 커밋 메시지만 잘못 적었다면

취소할 필요 없이 메시지만 수정합니다.

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

해결 4: 커밋에 빠뜨린 파일을 추가하고 싶다면

마지막 커밋에 파일을 끼워 넣을 수 있습니다.

git add 빠뜨린파일.js
git commit --amend --no-edit

--no-edit는 메시지를 그대로 두고 파일만 추가합니다.

해결 5: 이미 push한 커밋을 취소하려면

push한 뒤라면 reset 대신 revert가 안전합니다. 히스토리를 지우지 않고 되돌리는 커밋을 새로 만듭니다.

git revert HEAD

혼자 쓰는 브랜치에서 굳이 reset를 쓴다면 git push --force-with-lease가 필요하며, 공유 브랜치에서는 금지입니다.

주의점 정리

  • add 취소는 git restore --staged, 커밋 취소는 git reset으로 구분
  • --hard는 작업 내용을 삭제하니 신중히
  • push 후엔 reset 대신 revert
  • 실수해도 git reflog로 복구 가능한 경우가 많습니다

자주 묻는 질문

Q1. git add를 취소하면 내가 수정한 코드도 사라지나요?

아닙니다. git restore --stagedgit reset HEAD는 스테이징 표시만 해제할 뿐 파일 내용은 그대로 둡니다. 코드를 되돌리는 명령은 따로(git restore 파일명)이며, 이건 변경을 버리니 구분해서 쓰세요.

Q2. 커밋을 취소했는데 작업 파일이 사라졌어요.

git reset --hard를 썼을 가능성이 큽니다. 커밋된 상태였다면 git reflog에서 이전 지점을 찾아 git reset --hard 해시로 복구할 수 있습니다. 다만 한 번도 커밋하지 않은 변경은 복구가 어렵습니다.

Q3. restore와 reset 중 무엇을 써야 하나요?

최신 Git에서는 역할이 나뉘었습니다. 스테이징 해제는 git restore --staged, 커밋 자체를 되돌리는 것은 git reset입니다. 구버전 호환을 위해 git reset HEAD 파일도 여전히 동작하지만, 의미가 명확한 restore를 권장합니다.

git add 취소와 커밋 취소하는 법: 상황별 정확한 명령어 | CodeMaster 블로그 | CodeMaster