포스트

[GitHub 100일 챌린지] Day 67 - Stash 고급 활용

[GitHub 100일 챌린지] Day 67 - Stash 고급 활용

100일 챌린지 Day 67 - 여러 stash를 관리하고, 특정 파일만 꺼내고, stash를 브랜치로 분리하는 고급 활용을 배웁니다.

배울 내용

  1. 여러 stash를 구분하고 선택 적용하는 법
  2. stash에서 특정 파일만 복구하는 법
  3. 충돌이 큰 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


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.