Git

Git 강좌 05강 — 되돌리기: restore · reset · revert · stash

🎯 학습 목표

  • 작업 중 변경을 취소하는 방법을 안다.
  • reset과 revert의 차이를 이해한다.
  • stash로 작업을 잠시 치워 둔다.

📖 개념 설명

Git의 가장 큰 장점은 “거의 모든 것을 되돌릴 수 있다”는 점입니다. 다만 상황별로 도구가 다릅니다. 아직 커밋 안 한 변경을 버릴 때, 커밋을 취소할 때, 이미 push한 커밋을 안전하게 무효화할 때가 각각 다릅니다.

💻 실습 — 커밋 전 변경 취소

# 수정한 파일을 마지막 커밋 상태로 되돌림 (변경 폐기, 주의!)
git restore 파일명

# 스테이징만 취소 (변경 내용은 유지)
git restore --staged 파일명

💻 실습 — 커밋 되돌리기

# reset: 이력을 과거로 이동 (push 전 로컬에서만 권장)
git reset --soft HEAD~1    # 커밋만 취소, 변경은 스테이징에 남김
git reset --mixed HEAD~1   # 커밋+스테이징 취소, 변경 내용은 유지(기본값)
git reset --hard HEAD~1    # 커밋+변경 전부 삭제 (복구 어려움, 매우 주의!)

# revert: 해당 커밋을 "취소하는 새 커밋"을 만듦 (이미 push한 경우 안전)
git revert HEAD

💻 실습 — stash (잠시 치워두기)

# 작업 중인데 급히 다른 브랜치로 가야 할 때
git stash            # 현재 변경을 임시 보관하고 작업 폴더를 깨끗이
git switch main      # 다른 일 처리
git switch -          # 돌아와서
git stash pop        # 치워둔 변경 복원

⚠️ 주의사항

  • reset --hard는 변경을 완전히 지웁니다. 실행 전 꼭 한 번 더 확인하세요.
  • 이미 원격에 push한 커밋은 reset으로 지우지 말고 revert를 쓰세요. 안 그러면 협업자 이력이 꼬입니다.

💡 팁

  • 실수로 reset –hard 했어도 git reflog에 최근 위치가 남아 복구할 수 있는 경우가 많습니다.
  • stash에 여러 개를 쌓을 수 있습니다: git stash list, git stash apply stash@{1}.