[GitHub 100일 챌린지] Day 67 - Stash 고급 활용
100일 챌린지 Day 67 - 여러 stash를 관리하고, 특정 파일만 꺼내고, stash를 브랜치로 분리하는 고급 활용을 배웁니다.
배울 내용
- 여러 stash를 구분하고 선택 적용하는 법
- stash에서 특정 파일만 복구하는 법
- 충돌이 큰 stash를 브랜치로 안전하게 분리하는 법
1. 여러 stash 관리하기
stash가 하나뿐일 때는 git stash pop만으로 충분합니다. 하지만 여러 작업을 번갈아 저장하면 목록을 정확히 읽는 것이 중요합니다.
1
2
3
4
git stash list
# stash@{0}: On feature/cart: cart ui draft
# stash@{1}: On main: before urgent hotfix
# stash@{2}: On feature/search: search filter experiment
특정 stash를 적용하려면 이름을 지정합니다.
1
git stash apply stash@{2}
삭제할 때도 마찬가지입니다.
1
git stash drop stash@{1}
전체를 비우는 clear도 있지만 정말 조심해야 합니다.
1
git stash clear
clear는 모든 stash를 삭제합니다. 실무에서는 거의 항상 drop stash@{번호}처럼 하나씩 지우는 편이 안전합니다.
2. 특정 파일만 stash에서 꺼내기
stash 전체를 적용하면 원치 않는 파일까지 되살아날 수 있습니다. 특정 파일만 꺼내려면 git checkout 또는 최신 Git에서는 git restore를 사용할 수 있습니다.
1
2
# stash@{0}에서 특정 파일만 복구
git restore --source=stash@{0} -- src/components/LoginForm.js
폴더 단위도 가능합니다.
1
git restore --source=stash@{0} -- src/styles/
적용 전에 어떤 파일이 들어 있는지 확인하세요.
1
2
git stash show --name-only stash@{0}
git stash show -p stash@{0}
이 방법은 “작업 일부만 다시 살리고 싶을 때” 특히 유용합니다.
3. stash를 브랜치로 분리하기
오래된 stash를 현재 브랜치에 바로 적용하면 충돌이 크게 날 수 있습니다. 이럴 때는 stash를 새 브랜치로 꺼내는 방법이 안전합니다.
1
git stash branch recover-login-work stash@{0}
이 명령은 stash가 만들어졌던 커밋을 기준으로 새 브랜치를 만들고 stash를 적용합니다. 현재 브랜치에 바로 섞지 않기 때문에 충돌 범위를 줄일 수 있습니다.
흐름은 이렇게 이해하면 됩니다.
graph TD
A[stash@{0}] --> B[stash가 만들어진 커밋]
B --> C[새 브랜치 생성]
C --> D[stash 적용]
D --> E[검토 후 필요한 커밋만 가져오기]
4. 충돌이 날 때 처리하기
git stash pop이나 apply 중 충돌이 나면 일반 merge 충돌처럼 해결합니다.
1
2
3
4
5
6
7
git stash pop
# conflict 발생
git status
# 충돌 파일 수정
git add conflicted-file.js
apply는 충돌이 나도 stash 목록을 유지합니다. 반면 pop은 성공하면 stash를 제거하지만, 충돌이 나면 보통 stash가 남아 있으므로 git stash list로 확인하세요.
충돌이 예상되면 아래 순서가 더 안전합니다.
1
2
3
git stash apply stash@{0}
# 확인 후 문제가 없으면
git stash drop stash@{0}
5. 실전 습관
메시지를 구체적으로 남기기
1
git stash push -u -m "signup validation before API change"
나중에 보면 “WIP”만 있는 stash는 거의 기억나지 않습니다.
stash는 장기 보관함이 아니다
stash는 임시 보관함입니다. 며칠 이상 둘 작업이라면 브랜치를 만들고 커밋하세요.
1
2
3
git switch -c wip/signup-validation
git add .
git commit -m "WIP signup validation draft"
커밋은 기록과 리뷰가 가능하지만, stash는 개인 로컬 임시 상태에 가깝습니다.
정리
완료 체크:
stash@{번호}를 지정해서 원하는 stash만 적용할 수 있다- stash에서 특정 파일만 복구할 수 있다
- 충돌이 큰 stash는
git stash branch로 분리할 수 있다
핵심 요약:
git stash show -p stash@{0}- stash diff 확인git stash apply stash@{번호}- 특정 stash 적용git restore --source=stash@{0} -- 파일- 특정 파일만 복구git stash branch 브랜치명 stash@{0}- stash를 새 브랜치로 분리- 장기 보관은 stash보다 브랜치 + 커밋이 안전
다음: Day 68 - Git Cherry-pick →
