=> 마무리가 덜 된 작업을 commit 하지 않고 임시 보관.
ex) 작업 중 다른 브랜치로 이동하려는 경우
= 작업 임시 저장
: 새로운 stash를 스택에 만들어 하던 작업을 임시로 저장함.
$ git stash
or
$ git stash save "설명"
=> 이후 디렉토리는 깨끗해짐.( 다른 브랜치 이동 가능 )
= 임시 저장된 목록 조회
$ git stash list

= 임시 저장 작업 가져오기
# 가장 최근의 stash를 가져와 적용함.
$ git stash apply
# stash 이름 ex) stash@{0}에 해당하는 stash를 적용함.
$ git stash apply [stash 이름]
= 임시 저장 작업 가져오면서 리스트 삭제
$ git stash pop
= 이 파일이 staged area에 있는지 아닌지까지의 상태를 불러오기 위함.
: 명령어로 staged area에 올라간 파일의 상태를 불러오지 않으므로
$ git stash pop --index
$ git stash apply --index
= 임시 저장 내역 삭제
: 주로 apply로 가져온 값이 필요없어진 경우에 사용함.
$ git stash drop
$ git stash drop [stash 이름]
= 임시 내역 전부 삭제
$ git stash clear
= 잘못 stash 적용한 것 되돌림
# 가장 최근의 stash를 사용하여 패치를 만들고 그것을 거꾸로 적용.
$ git stash show -p | git apply -R
# stash 이름에 해당하는 stash를 이용하여 거꾸로 적용.
$ git stash show -p [stash 이름] | git apply -R
= 명령어 등록
$ git config --global alias.stash-unapply '!git stash show -p | git apply -R'
$ git stash apply
$ #... work work work
#alias로 등록한 stash 되돌리기 명령어
$ git stash-unapply
GIT에서 관리되고 있는 파일만 임시저장 할 수 있음.
: Untracked files 상태는 불가
-u 옵션을 사용한다면 Untracked files 파일도 임시 저장할 수 있음.
일시적인 저장
: 영구적 저장해야하는 변경사항은 commit 필요.
변경사항의 충돌
: pot 혹은 apply 사용 시, 워킹 디렉토리의 현재 상태와 stash된 변경사항이 충돌할 수 있음 ( => 수동 해결 필요 )
스테이징 영역의 상태
: git stash를 사용하면 워킹 디렉토리의 변경사항 뿐만 아니라 스테이징 영역(git add) 의 상태도 저장됨