여러분이 작업하고 있는데 갑자기 브랜치를 바꿔야 할 때나, 혹은 당장 커밋하기에는 좀 이른 감이 있지만 다른 작업을 할 때, 그냥이라면 간단하게 코드 변경사항을 잠시 숨겨놓고 싶을 때가 있을 겁니다. 이럴 때에 사용하기 편한 것이 바로 git stash라고 할 수 있습니다.
git stash 명령을 사용하면 작업한 디렉토리에서 수정한 파일들만 저장하게 됩니다. git stash를 사용하여 저장하면, 스택(Stack) 형식으로 저장하게 됩니다. git stash는 git으로 버전 관리를 하고 있는 파일들에 수정 내용을 임시로 저장하기 때문에 새롭게 생성된 파일을 저장되지 않습니다. 새롭게 생성한 파일도 함께 임시 저장하고 싶다면, git add로 새롭게 생성된 파일들을 git으로 관리하도록 한 후, git stash를 통해 저장해야 합니다.
1. 변경 내용 저장
'git stash save', 'git stash push' 명령어를 사용하여 현재 작업 디렉토리의 변경 내용을 저장합니다. 이때, 변경사항은 스택에 저장되며, 작업 디렉토리는 이전 커밋의 상태로 돌아갑니다.
git stash save "stash message"
2. 작업 디렉토리에 적용
변경 사항이 저장된 스택에서 필요한 것을 꺼내와서 작업 디렉토리에 적용할 수 있습니다.
- git stash apply : 가장 최근의 stash를 적용합니다.
git stash apply
- 'git stash apply stash@{n}' : 특정 stash를 적용합니다.
git stash apply stash@{2}
- 'git stash pop': 가장 최근의 stash를 적용하고, 적용한 stash를 스택에서 제거합니다.
git stash pop
3. 스택 관리
- 'git stash list' 명령어로 현재 저장된 stash 목록을 확인하고, 'git stash drop'으로 stash를 제거할 수 있습니다.
git stash list
git stash drop stash@{2}
4. 중요
작업 중이던 코드를 git stash를 하고 실수로 git stash clear 또는 drop을 해서 실수로 stash를 삭제한 경험이 있을 겁니다.
(그게 저입니다 🙋🏼♂️🙋🏼♂️🙋🏼♂️)
실수로 삭제한 stash를 입력한 프로젝트 파일 위치에서 아래 명령어를 입력합니다.
git fsck --no-reflog | awk '/dangling commit/ {print $3}' | xargs -L 1 git --no-pager show -s --format="%ci %H" | sort
시간을 보고 지운 stash를 확입합니다. (가장 최근에 지웠다면 맨 아래 값에 있습니다.)
git stash apply 해시값