dev.syw

git restore, git reset, git revert, git stash를 각각 언제 써야 하는지 명확히 구분한다.

되돌리기

"방금 한 작업을 취소하고 싶다"는 상황은 자주 옵니다. Git에는 되돌리기 명령이 여러 개 있고, 각각 쓰는 시점이 다릅니다. 헷갈리기 쉬우니 언제 무엇을 쓰는지를 분명히 정리합니다.

학습 목표

  • git restore로 작업 변경과 스테이징을 취소한다.
  • git reset의 soft·mixed·hard 차이를 이해한다.
  • git revert로 안전하게 커밋을 되돌린다.
  • git stash로 변경을 잠시 치워 둔다.

한눈에 보는 선택 기준

상황명령
아직 커밋 안 한 파일 변경을 버리고 싶다git restore <file>
스테이징(add)만 취소하고 싶다git restore --staged <file>
커밋을 취소하고 싶다(아직 push 전)git reset
이미 push한 커밋을 되돌리고 싶다git revert
작업을 잠시 치워 두고 싶다git stash

git restore — 미커밋 변경 취소

아직 커밋하지 않은 변경을 되돌립니다.

git restore index.html          # 파일 수정을 마지막 커밋 상태로 되돌림 (변경 버림)
git restore --staged index.html # 스테이징만 취소 (수정 내용은 유지)
git restore .                   # 작업 디렉터리의 모든 변경 되돌리기

git restore <file>은 변경을 영구히 버리므로 신중히 사용합니다.

git reset — 커밋 되돌리기 (push 전)

reset은 현재 브랜치의 끝(HEAD)을 과거 커밋으로 옮깁니다. 세 가지 모드가 핵심입니다.

git reset --soft HEAD~1   # 커밋만 취소, 변경은 스테이징 상태로 남김
git reset --mixed HEAD~1  # (기본값) 커밋 취소, 변경은 작업 디렉터리로 남김
git reset --hard HEAD~1   # 커밋과 변경을 모두 버림 ⚠️ 위험

비교하면 이렇습니다.

모드커밋스테이징작업 파일
--soft취소유지(스테이징됨)유지
--mixed취소취소유지
--hard취소취소삭제

예를 들어 "마지막 커밋 메시지만 다시 쓰고 싶다"면 --soft로 되돌린 뒤 다시 커밋하거나, 더 간단히는 --amend를 씁니다.

git commit --amend -m "고친 메시지"   # 마지막 커밋을 새로 다시 만듦

⚠️ reset --hard는 커밋하지 않은 변경을 영구 삭제합니다. 또 reset은 이력을 바꾸므로, 이미 원격에 push한 커밋에는 쓰지 마세요. 협업자와 이력이 어긋납니다.

git revert — 안전하게 되돌리기 (push 후)

이미 공유(push)된 커밋을 되돌릴 때는 revert를 씁니다. 기존 커밋을 지우지 않고, 그 변경을 상쇄하는 새 커밋을 추가합니다. 이력이 보존되므로 협업에 안전합니다.

git revert a1b2c3d    # a1b2c3d 의 변경을 되돌리는 새 커밋 생성

git stash — 변경을 잠시 치워 두기

작업 중인데 급히 다른 브랜치로 가야 할 때, 아직 커밋하기는 이른 변경을 임시로 보관합니다.

git stash            # 현재 변경을 치워 두고 깨끗한 상태로
git stash list       # 치워 둔 목록 보기
git stash pop        # 가장 최근 stash 를 다시 꺼내며 목록에서 제거
git stash apply      # 꺼내되 목록에는 남겨 둠
git stash drop       # 특정 stash 버리기
# 예: 작업 중 급한 버그를 main 에서 고쳐야 할 때
git stash            # 작업 임시 저장
git switch main      # 버그 수정 브랜치로 이동
# ... 수정 후 ...
git switch feature/x # 원래 브랜치로 복귀
git stash pop        # 하던 작업 복원

요약

미커밋 변경은 git restore, 아직 push 전 커밋은 git reset(soft/mixed/hard), 이미 push한 커밋은 git revert, 잠깐 치워 둘 땐 git stash를 씁니다. 특히 공유된 이력에는 reset 대신 revert를 쓰는 것이 핵심 원칙입니다. 다음 강좌에서는 머지 충돌 해결과 리베이스를 배웁니다.

함께 보면 좋은 자료

📚 레퍼런스

댓글 0

Git & GitHub강좌에 대한 댓글입니다.

댓글을 작성하려면 로그인이 필요합니다.