git stash란?

artp·2025년 9월 13일

git&github

목록 보기
14/18
post-thumbnail

stash란 무엇인가?

  • stash는 Git의 로컬 임시 저장 공간입니다.
  • 워킹 디렉토리와 스테이징 영역에 있는 변경사항(= 작업 내용 = 워킹 디렉토리에서 수정된 파일 + 스테이징 영역에 올려둔 파일)을 커밋하지 않고도 안전하게 보관할 수 있습니다.
  • 자료구조에서의 스택(stack)처럼 동작합니다.
    • 가장 최근에 저장된 stashstash@{0}
    • 그 이전 것들은 stash@{1}, stash@{2} 순서로 쌓임
    • git stash pop은 스택의 pop()처럼 꺼내면서 삭제
    • git stash apply는 스택의 peek()처럼 꺼내지만 삭제하지 않음
  • stash는 원격 저장소와는 공유되지 않고 오직 로컬에서만 사용 가능합니다.

git stash

  • 현재 작업 중인 변경사항(워킹 디렉토리 + 스테이징 영역)을 임시 저장소에 보관하고, 작업 공간을 깨끗한 상태로 되돌리는 명령어
    • 커밋하기 애매한 상태의 변경사항을 잠깐 숨겨두는 것

git stash pop

  • stash에 보관된 변경사항을 다시 꺼내와 작업 공간에 적용하고, 해당 stash 기록은 삭제하는 명령어
    • 숨겨둔 변경사항을 다시 불러와 이어서 작업할 수 있도록 하는 것

시나리오

상황:

  • 로그인 기능 개발 브랜치(feature/login)에서 UI를 수정 중
  • 아직 완성되지 않아 커밋하기 애매한 상황에서 메인 브랜치 버그를 먼저 고쳐야 하는 상황 발생

해결:

  1. 현재 작업 중인 변경사항을 stash에 임시 저장

    git stash
  2. main 브랜치로 이동하여 버그 수정 및 커밋/푸시 진행

  3. 다시 feature/login 브랜치로 돌아와 stash에 저장해둔 변경사항을 가져옴

    git stash pop
    • 로그인 UI 작업이 그대로 복원됨

기타 stash 명령어

  • git stash list
    • stash에 저장된 모든 항목 확인

  • git stash apply - 가장 최근 스태시 적용
  • git stash apply stash@{2} - 특정 스태시 적용
    • stash를 작업 공간에 적용하되, stash 목록에서는 삭제하지 않음
      (작업 공간에 적용 - 해당 시점의 변경 사항을 다시 워킹 디렉토리와 스테이징 영역으로 되돌려 놓는다는 뜻. 커밋 아님.)
    • 특정 stash를 적용할 수 있음 (git stash apply stash@{번호})

  • git stash drop
    • 특정 stash 항목 삭제

  • git stash clear
    • stash에 저장된 모든 항목 삭제

  • git stash push -m "메시지"
    • 메시지와 함께 저장 가능하며, git stash list에서 식별하기 쉽도록 설명이 붙음

정리

  • git stash
    • 변경사항을 임시 저장
    • 작업 공간을 초기화하여 브랜치 전환 가능
  • git stash pop
    • 임시 저장했던 변경사항을 다시 적용
    • stash 목록에서 해당 항목은 삭제됨
  • 활용 시점
    • 커밋하기 애매한 작업이 있는데, 급히 다른 브랜치로 전환해야 할 때 또는 원격사항을 pull 받아야 할 때 유용
    • 협업 중 충돌을 방지하거나, 작업 맥락을 유지해야 할 때 자주 사용
profile
donggyun_ee

0개의 댓글