Profile picture

[Git] git stash 명령어

JaehyoJJAng2022년 03월 04일

하던 작업을 임시로 저장 해두고 싶을 때 사용하는 커맨드

git stash

  • 현재 dev 브랜치에서 열심히 작업 도중 급한 요청이 들어와 현재 작업을 멈추고 feather/api 브랜치를 새로 만들어서 API 를 만들어야 한다.
    • 그럼 이전에 dev 브랜치에서 작업하던 것은 어떻게 해야할까?

그럴때 사용하는 것이 git stash 이다.

  • git stash 명령을 사용하면 working directory에서 수정한 파일들만 저장
  • stash 란 아래에 해당하는 파일들을 보관해두는 장소
    • Modified 이면서 Tracked 상태인 파일

      • Tracked 상태인 파일을 수정한 경우
        • Tracked: 과거에 이미 commit 하여 스냅샷에 넣어진 관리 대상 상태의 파일
    • Staging Area 에 있는 파일 (staged 상태의 파일)

      • git add 명령을 실행한 경우
      • staged 상태로 만들려면 git add 커맨드 사용

하던 작업 임시로 저장하기

새로운 stash를 스택에 만들어 하던 작업 임시로 중단

  • 파일 1개를 staging area 에 추가 (git add )
  • $ git status
    On branch main
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
      new file:   02_토요코인 객실 모니터링/main.py

git stash 명령어 실행

git stash
git stash save
$ git stash

Saved working directory and index state WIP on main: 843b3ce [UPD]: Update requirements.txt

stash 목록 확인

$ git stash list

stash@{0}: WIP on main: 843b3ce [UPD]: Update requirements.txt

stash 적용

  • 이전 작업 다시 불러오기
# 가장 최근 stash 가져와 적용
$ git stash apply

# stash 이름 (stash@{1}에 해당하는 stash 적용)
$ git stash apply [stash 이름]

그러나 위의 명령어 만으로는 Staged 상태였던 파일을 다시 자동으로 Staged 상태로 만들어 주지는 않음.

  • --index 옵션 사용
# Staged 상태까지 저장
$ git stash apply --index

stash 제거

# 가장 최근의 stash 제거
$ git stash drop 

# stash 이름 (stash@{1}에 해당하는 stash 제거)
$ git stash drop [stash 이름]

# 모든 stash 제거
$ git stash drop $(git stash list | awk -F':' '{print $1}')

Loading script...