본문 바로가기

Development/Git

Git Stash와 Reset/Checkout의 차이점: 혼란 끝내기

Git Stash와 Reset/Checkout의 차이점: 혼란 끝내기

Git을 사용하다 보면, 작업 중인 코드를 임시로 저장하거나, 잘못된 커밋을 되돌리거나, 특정 파일을 이전 상태로 되돌려야 하는 상황이 발생한다.
이때 Git Stash, Reset, Checkout은 매우 유용한 도구지만, 처음 접하는 사람들에게는 헷갈리기 쉬운 개념이다.

이번 포스팅에서는 이 세 가지 기능을 명확히 비교하고, 언제 어떤 도구를 사용하는 것이 적합한지 쉽고 간결하게 정리해 보았다.


1. Git Stash: 작업 저장소 🧳

Git Stash는 현재 작업 중인 변경 사항을 임시로 저장하고, 작업 디렉토리를 깨끗하게 비울 수 있도록 도와주는 기능이다.
이후 필요할 때 언제든 저장된 상태를 복원할 수 있다.

주요 특징

  • 작업 저장 및 복원: 변경 내용을 임시 저장해, 다른 작업을 시작할 수 있다.
  • 현재 브랜치를 변경하지 않음: 저장된 변경 사항은 브랜치와 독립적으로 관리된다.

사용법

  1. 변경 사항 저장:

    git stash
  2. 저장된 상태 확인:

    git stash list
  3. 저장된 상태 복원:

    git stash apply
  4. 저장된 상태 삭제:

    git stash drop

2. Git Reset: 과거로 돌아가기 ⏪

Git Reset은 현재 브랜치를 특정 커밋으로 이동시키며, 이동 방식에 따라 워킹 디렉토리와 스테이징 영역의 상태를 수정할 수 있다.

주요 특징

  • 브랜치의 HEAD 위치 변경: 현재 브랜치를 특정 커밋으로 이동.
  • 옵션에 따른 동작:
    • --soft: HEAD만 이동 (스테이징 영역과 워킹 디렉토리는 그대로 유지).
    • --mixed(기본값): HEAD 이동 + 스테이징 영역 초기화.
    • --hard: HEAD 이동 + 스테이징 영역 및 워킹 디렉토리 초기화.

사용법

git reset [옵션] <커밋 해시>

예시

  • 최근 커밋을 취소하고, 작업 내용은 유지:

    git reset --soft HEAD~1
  • 최근 커밋을 취소하고, 작업 내용은 스테이징에서 해제:

    git reset --mixed HEAD~1
  • 최근 커밋을 완전히 삭제:

    git reset --hard HEAD~1

3. Git Checkout: 특정 상태로 이동 🚶

Git Checkout은 특정 브랜치, 커밋, 또는 파일을 현재 작업 디렉토리로 불러오는 기능이다.

주요 특징

  • 브랜치 이동: 다른 브랜치로 HEAD 이동.
  • 파일 복원: 특정 커밋이나 브랜치의 파일을 워킹 디렉토리로 복원.

사용법

  1. 브랜치 이동:

    git checkout <브랜치 이름>
  2. 특정 파일 복원:

    git checkout <커밋 해시> -- <파일 경로>
  3. 새로운 브랜치 생성 및 이동:

    git checkout -b <새 브랜치 이름>

Stash vs Reset vs Checkout: 언제 쓰는 게 좋을까? 🔍

기능 주요 사용 사례 장점 단점
Stash 작업을 임시 저장하고 워킹 디렉토리를 깨끗하게 유지하고 싶을 때. 작업 상태를 쉽게 저장하고 복원 가능. 스택 관리가 복잡할 수 있음.
Reset 브랜치를 특정 커밋으로 되돌리고 싶을 때 (히스토리 수정). 히스토리를 깔끔하게 정리 가능. 협업 중에는 사용 시 주의 필요.
Checkout 특정 브랜치로 전환하거나 특정 파일의 이전 상태를 복원하고 싶을 때. 파일 단위로 복원 가능. 현재 작업 상태를 덮어씌움.

실제 사례로 알아보는 활용법 💡

시나리오 1: 작업 중 긴급한 수정 요청

작업 중인 상태를 유지하면서 다른 문제를 처리해야 할 때:

git stash          # 변경 사항 임시 저장
git checkout main  # 메인 브랜치로 이동
# 수정 작업 수행 후
git stash apply    # 임시 저장한 변경 사항 복원

시나리오 2: 잘못된 커밋 되돌리기

git reset --soft HEAD~1  # 최근 커밋 취소, 변경 사항 유지

시나리오 3: 특정 파일 복원

git checkout HEAD~1 -- src/example.js  # 한 커밋 전 상태로 특정 파일 복원

마무리하며 🎉

Git Stash, Reset, Checkout은 각각의 상황에서 매우 유용한 기능이다.
이 세 가지를 적절히 활용하면 Git 작업을 훨씬 효율적으로 수행할 수 있다.

다음 포스팅에서는 Git Reflog다양한 Git 문제 해결 방법을 소개할 예정이다.
궁금한 점은 댓글로 남겨 주세요! 🚀