stash - 작업 임시 저장
1. git stash의 필요성
- 현재 브랜치에서 작업을 하다가 갑자기 다른 브랜치로 이동해서 작업해야 할 때가 종종 있음.
- 이때 작업 중인 내용을 커밋하지 않으면 다른 브랜치로 이동할 수 없고, 작업 내용이 사라질 위험이 있음.
2. git stash 활용법
git stash명령어를 사용하면 현재 워킹 디렉토리의 변경 내용을 안전하게 임시 저장할 수 있음.- 임시 저장된 내용은 스택(stack) 구조로 관리됨.


- 작업 임시 저장과 복원
작업 내용을 임시 저장:
bashgit stash저장된 내역 확인:
bashgit stash list다른 브랜치로 안전하게 이동할 수 있음:
bashgit checkout 브랜치명임시 저장한 내용 복원:
bashgit stash apply복원 후 작업 이어서 진행하고 커밋
- 정리
- 커밋하지 않은 작업을 잠깐 저장해야 할 때는 쓸데없는 커밋을 만들지 않도록
git stash명령어를 사용하면 됨. - 실무에서 아주 유용하게 쓰이는 저장 기능임.
- 커밋하지 않은 작업을 잠깐 저장해야 할 때는 쓸데없는 커밋을 만들지 않도록
3. 잘못된 브랜치에서 작업했다면?
- 원래 작업해야 할 브랜치가 아닌 다른 브랜치(예: master)에서 코드를 수정하거나 파일을 추가함.
- 이럴 때 당황하지 말고,
git stash를 사용해 임시로 작업 내용을 저장한다.

해결 방법
- 작업 내용 임시 저장
git stash 명령어로 현재 작업 중인 내용을 스택에 저장한다.
- 올바른 브랜치로 이동
git checkout [올바른브랜치명]으로 이동.
- 작업 내용 복구
git stash list로 저장된 작업 목록을 확인.git stash apply stash@{n}명령어로 원하는 stash의 작업 내용을 복구.(충돌이 발생할 수 있으니, 충돌 내용을 직접 해결 후 저장)
- 커밋하기
충돌을 해결한 뒤, git add . → git commit -m "커밋 메시지"로 커밋.
- stash 관리
이미 적용한 stash는 git stash drop stash@{n} 명령어로 삭제해서 리스트를 정리.
잘못된 브랜치에서 작업했다는 걸 알게 되면,
💡
git stash → 올바른 브랜치 이동 → git stash apply → 충돌 해결 & 커밋 → stash 삭제
4. 적용한 작업 내용은 스택에서 제거하기
1. 작업 내용 저장
git stash2. 작업 내용 조회(=스택 살펴보기)
git stash list3. 작업 내용 적용
git stash apply [작업 내용의 아이디]- 작업 내용의 아이디를 생략하면 가장 최근의 작업 내용이 적용됨
4. 작업 내용 제거
git stash drop [작업 내용의 아이디]- 작업 내용의 아이디를 생략하면 가장 최근의 작업 내용이 제거됨
**적용(apply)**한 작업 내용은 스택에서 **제거(drop)**해주는 게 좋습니다.
그래서 git stash apply를 쓰고 git stash drop을 바로 해 줄 수 있는데요.
그런데 사실 이런 식으로 번거롭게 할 필요없이, 작업 내용을 적용하면서 동시에 스택에서 제거도 해주는 커맨드가 있습니다.
그건 바로
git stash pop [작업 내용의 아이디]이라는 커맨드입니다. 이 커맨드를 쓰면 특정 작업 내용을 적용함과 동시에 그것을 스택에서 제거합니다.
어떤 커맨드인지 직접 보여드릴게요.
1. git stash 하기
아래 그림과 같은 README.md 파일을 갖고 해볼게요.

기존의 내용에 테스트용 문장인 "git stash pop"이라는 문장을 추가해볼게요.

그 다음 파일을 저장(Save)하고
작업 내용을 스택에 저장(git stash)할게요.

이때 잠깐 README.md 파일을 보면 아래 그림처럼 원래대로 돌아옵니다.

작업 내용을 스택에 저장(git stash)하고 나면 파일의 내용은 작업하기 이전의 상태(=최신 커밋에서의 상태)로 돌아온다고 했었죠?
지금 정상적인 상태니까 당황하지 마세요.
자, 이제 스택에 저장된 작업 내용을 살펴볼게요. git stash list 커맨드로 확인해보면,

방금 한 작업 내용이 잘 저장되어 있습니다.
2. git stash pop 하기
이 상태에서
git stash pop을 실행할게요.

그럼 README.md 파일이 변경되었다는 문장이 출력됩니다. 다시 README.md 파일을 보면,

작업 내용이 복원되었습니다. 여기까지는 git stash apply와 차이가 없습니다.
하지만 다시 스택을 들여다보면,

아무것도 출력되지 않습니다. 아까 설명한 대로 git stash pop은 작업 내용을 적용하면서 동시에 스택에서 제거하기 때문입니다.
참고로,
git stash pop [작업 내용의 아이디]git stash pop 커맨드는
[작업 내용의 아이디]를 인자로 주면, 특정 작업 내용을 적용하면서 스택에서 제거합니다.
[작업 내용의 아이디]를 인자로 주지 않으면, 가장 최근에 한 작업 내용을 적용하면서 스택에서 제거합니다.
정리하면,
앞으로 스택에 저장된 작업 내용을 working directory에 적용할 때
- 그 작업 내용을 나중에 또 쓸 필요가 있다면 git stash apply를
- 나중에 또 쓸 필요가 없다면 git stash pop을 쓰면 됩니다.
일반적으로는 후자의 경우가 더 많을 겁니다.
정리
| 명령어 | 하는 일 |
|---|---|
git stash | 작업 내용을 스택에 임시 저장 |
git stash list | 저장된 목록 보기 |
git stash apply [아이디] | 적용 (스택에 남음) |
git stash drop [아이디] | 스택에서 삭제 |
git stash pop [아이디] | 적용하면서 스택에서 삭제 |
참고: 개인 Notion 학습 노트 (Git 공부)
