Git에서 pull을 하거나 다른 브랜치로 전환하려고 할 때 로컬 변경사항 때문에 작업이 막히는 경우가 있습니다. 아직 커밋하기에는 애매하지만 작업물을 잃고 싶지 않다면 git stash로 현재 변경사항을 잠시 보관한 뒤 다시 꺼내는 방식이 안전합니다.
핵심 순서는 간단합니다. 먼저 git status로 변경된 파일을 확인하고, git stash로 임시 저장한 뒤, 필요한 pull이나 branch 전환을 진행합니다. 이후 git stash pop 또는 git stash apply로 보관한 변경사항을 다시 적용하면 됩니다.
Git stash로 pull과 branch 전환 전 변경사항을 안전하게 임시 저장하는 흐름입니다.
Git stash가 필요한 상황
git stash는 작업 중인 변경사항을 커밋하지 않고 잠시 치워두는 명령어입니다. 주로 현재 작업은 끝나지 않았지만, 다른 브랜치로 이동하거나 원격 저장소의 최신 내용을 받아와야 할 때 사용합니다.
| 상황 | 바로 커밋해도 될까? | 추천 처리 |
|---|---|---|
| 작업이 완성되어 의미 있는 단위가 됨 | 예 | git add 후 git commit |
| 코드가 아직 실험 중이거나 깨진 상태 | 아니오 | git stash로 임시 저장 |
| 다른 브랜치로 급히 이동해야 함 | 상황에 따라 다름 | git stash push -m으로 메모와 함께 저장 |
대표 오류 메시지: 로컬 변경사항이 덮어써질 수 있을 때
Git이 브랜치 전환이나 pull을 막는 이유는 로컬에서 수정한 파일이 원격 변경사항 또는 다른 브랜치의 파일과 겹칠 수 있기 때문입니다. 이 상태에서 강제로 진행하면 작업물이 덮어써질 위험이 있어 Git이 먼저 멈춥니다.
pull 전에 자주 보는 오류
error: Your local changes to the following files would be overwritten by merge:
app.js
Please commit your changes or stash them before you merge.
Aborting
이 메시지는 git pull 과정에서 병합이 필요하지만, 현재 로컬 변경사항이 있어 덮어쓰기가 발생할 수 있다는 뜻입니다. 이 경우 변경사항을 커밋하거나 stash로 잠시 보관한 뒤 다시 pull을 진행합니다.
branch 전환 전에 자주 보는 오류
error: Your local changes to the following files would be overwritten by checkout:
src/index.js
Please commit your changes or stash them before you switch branches.
Aborting
git checkout 또는 git switch로 브랜치를 바꿀 때도 같은 문제가 생길 수 있습니다. 현재 브랜치에서 수정한 파일과 이동하려는 브랜치의 파일 상태가 충돌할 수 있기 때문입니다.
이 오류 자체의 원인과 선택지를 더 자세히 보려면 Git pull 오류에서 로컬 변경사항이 덮어써진다는 메시지를 처리하는 순서를 함께 확인하면 흐름을 잡기 쉽습니다.
git stash 기본 사용법
가장 먼저 현재 작업 상태를 확인합니다. 어떤 파일이 수정되었는지 모른 채 stash를 실행하면 나중에 무엇을 저장했는지 헷갈릴 수 있습니다.
git status
변경된 파일을 확인했다면 다음 명령어로 현재 변경사항을 임시 저장합니다.
git stash
나중에 stash 목록을 볼 때 구분하기 쉽도록 메시지를 붙여 저장하는 방법도 좋습니다.
git stash push -m "login page work before pull"
기본 git stash는 보통 Git이 추적 중인 파일의 변경사항을 저장하는 데 사용합니다. 새로 만든 파일까지 함께 보관해야 한다면 -u 옵션을 붙이는 것이 안전합니다.
git stash -u
주의할 점
stash는 임시 보관소입니다. 장기간 보존해야 하는 작업이라면 stash에 오래 두기보다 별도 브랜치를 만들고 커밋으로 남기는 편이 더 안전합니다.
pull 전에 stash를 쓰는 순서
git pull 전에 로컬 변경사항 때문에 막혔다면 다음 순서로 처리합니다. 핵심은 현재 작업을 먼저 저장하고, pull 후 다시 꺼내는 것입니다.
git status
git stash push -m "work before pull"
git pull
git stash pop
이 순서로 진행하면 로컬 변경사항을 잠시 치운 상태에서 원격 저장소의 최신 변경사항을 받아올 수 있습니다. 이후 git stash pop으로 저장해 둔 작업을 다시 적용합니다.
pull 전에 확인할 체크리스트
1. git status로 변경된 파일을 확인합니다.
2. 저장할 필요가 없는 임시 파일은 먼저 정리합니다.
3. 중요한 변경사항은 git stash push -m처럼 메시지를 붙여 저장합니다.
4. git pull 후 git stash pop을 실행합니다.
branch 전환 전에 stash를 쓰는 순서
브랜치를 바꾸기 전에 로컬 변경사항이 걸린다면 다음 순서로 처리합니다. checkout을 쓰는 프로젝트도 있지만, 최근에는 브랜치 전환 목적이라면 git switch를 함께 사용합니다.
git status
git stash push -m "work before branch switch"
git switch feature/login
git stash pop
checkout을 사용하는 경우라면 다음처럼 진행할 수 있습니다.
git stash push -m "work before checkout"
git checkout feature/login
git stash pop
브랜치 전환 오류 메시지의 원인과 커밋·stash·discard 중 어떤 선택을 해야 하는지 헷갈린다면 Git branch 변경 오류에서 checkout 메시지를 처리하는 기준을 먼저 확인하는 것도 좋습니다.
git stash list로 저장 목록 확인하기
stash를 여러 번 사용하면 어떤 작업을 저장했는지 헷갈릴 수 있습니다. 이때는 stash 목록을 먼저 확인합니다.
git stash list
예시는 다음과 비슷하게 표시됩니다.
stash@{0}: On main: work before pull
stash@{1}: On feature/login: login page work
stash@{0}은 가장 최근에 저장한 stash입니다. 특정 stash를 꺼내고 싶다면 번호를 지정합니다.
git stash apply stash@{1}
git stash apply와 git stash pop 차이
apply와 pop은 모두 stash에 저장한 변경사항을 다시 작업 디렉터리에 적용합니다. 차이는 적용 후 stash 목록에 남겨 두는지 여부입니다.
| 명령어 | 적용 후 목록 | 추천 상황 |
|---|---|---|
git stash pop |
성공하면 목록에서 제거됨 | 가장 최근 stash를 한 번만 되돌릴 때 |
git stash apply |
목록에 계속 남음 | 되돌리기 전에 안전하게 확인하고 싶을 때 |
초보자라면 중요한 작업일수록 처음에는 git stash apply를 쓰는 편이 부담이 적습니다. 적용 결과를 확인한 뒤 문제가 없으면 직접 git stash drop으로 삭제할 수 있기 때문입니다.
git stash apply
git stash list
git stash drop stash@{0}
git stash pop 충돌이 났을 때 처리 순서
git stash pop을 실행했는데 충돌이 발생할 수 있습니다. 보관했던 변경사항을 현재 브랜치에 다시 적용하는 과정에서 같은 파일의 같은 부분이 이미 바뀌어 있으면 Git이 자동으로 합치지 못합니다.
git stash pop
충돌이 생기면 먼저 상태를 확인합니다.
git status
충돌 파일을 열면 보통 다음과 비슷한 표시가 있습니다.
<<<<<<< Updated upstream
현재 브랜치의 내용
=======
stash에서 꺼낸 내용
>>>>>>> Stashed changes
처리 순서는 다음과 같습니다.
stash pop 충돌 처리 순서
1. git status로 충돌 파일을 확인합니다.
2. 파일을 열고 남길 코드와 지울 코드를 직접 정리합니다.
3. 충돌 표시인 <<<<<<<, =======, >>>>>>>를 모두 제거합니다.
4. 정리한 파일을 git add로 표시합니다.
5. 필요하면 커밋하거나 작업을 계속합니다.
git add .
git status
git stash pop이 충돌로 실패하면 stash 항목이 목록에 남아 있을 수 있습니다. 충돌을 정리하고 적용 결과를 확인한 뒤, 더 이상 필요 없다면 직접 삭제합니다.
git stash list
git stash drop stash@{0}
충돌 표시를 어떻게 읽고 어떤 코드를 남길지 판단하는 과정이 어렵다면 Git merge conflict에서 CONFLICT와 Automatic merge failed를 처리하는 순서를 함께 보면 좋습니다.
git stash drop과 clear 주의점
git stash drop은 stash 목록에서 특정 항목 하나를 삭제합니다. 이미 적용을 마쳤고 다시 사용할 일이 없는 stash만 삭제하는 것이 좋습니다.
git stash drop stash@{0}
git stash clear는 먼저 주의해야 합니다
아래 명령어는 stash 목록 전체를 삭제합니다. 특정 항목 하나만 지우는 명령이 아니므로, 저장해 둔 작업이 여러 개 있다면 실행 전에 반드시 git stash list로 확인해야 합니다.
git stash clear
clear는 작업 디렉터리의 현재 파일을 직접 삭제하는 명령은 아니지만, stash에만 남겨 둔 작업을 한꺼번에 잃을 수 있습니다. 초보자라면 대부분의 상황에서 clear보다 drop을 쓰는 편이 안전합니다.
VSCode에서 stash 확인하는 방법
VSCode를 사용한다면 터미널뿐 아니라 명령 팔레트에서도 stash 관련 명령을 찾을 수 있습니다. 메뉴명은 버전과 확장 설정에 따라 조금 다를 수 있으므로, 가장 확실한 방법은 명령 팔레트를 여는 것입니다.
VSCode에서 확인하는 흐름
1. VSCode에서 프로젝트 폴더를 엽니다.
2. 터미널을 열고 git status를 먼저 실행합니다.
3. 명령 팔레트에서 Git: Stash 또는 Git: Apply Stash를 검색합니다.
4. 충돌이 생기면 Source Control 패널에서 충돌 파일을 확인합니다.
Git 명령어와 VSCode 화면 흐름을 함께 익히고 싶다면 VSCode Git 입문에서 커밋, 푸시, 브랜치, 충돌 해결 흐름을 함께 참고하면 좋습니다.
실전에서 가장 안전한 사용 패턴
Git stash를 안전하게 쓰려면 “확인 → 저장 → 작업 → 적용 → 정리” 순서를 습관처럼 반복하면 됩니다. 특히 여러 번 stash를 쌓아두면 나중에 헷갈리기 쉬우므로 메시지를 붙이는 습관이 중요합니다.
git status
git stash push -m "작업 내용 간단 메모"
git pull
git stash apply
git status
git stash drop stash@{0}
pop을 바로 써도 되지만, 중요한 작업이라면 apply로 먼저 적용하고 결과를 확인한 뒤 drop으로 정리하는 방식이 더 안전합니다.
공식 자료로 더 확인하기
함께 보면 좋은 글
FAQ
git stash를 쓰면 커밋 기록에 남나요?
아니요. git stash는 변경사항을 임시 저장할 뿐 일반 커밋처럼 브랜치 히스토리에 남기지 않습니다. 그래서 아직 완성되지 않은 작업을 잠시 치워둘 때 유용합니다. 다만 장기간 보관해야 하는 작업이라면 stash보다 별도 브랜치에 커밋으로 남기는 편이 더 안전합니다.
git stash pop과 apply 중 무엇을 먼저 쓰는 게 좋나요?
초보자라면 중요한 작업에서는 git stash apply를 먼저 쓰는 편이 안전합니다. apply는 변경사항을 적용해도 stash 목록에 기록이 남습니다. 적용 결과를 확인한 뒤 문제가 없을 때 git stash drop으로 직접 삭제하면 실수로 보관 기록을 잃을 가능성을 줄일 수 있습니다.
git stash를 했는데 새 파일이 저장되지 않은 것 같아요.
새로 만든 파일이 아직 Git에 추적되지 않는 untracked 상태라면 기본 stash에 포함되지 않아 헷갈릴 수 있습니다. 새 파일까지 함께 임시 저장하려면 git stash -u 또는 git stash push -u -m "메모"처럼 -u 옵션을 붙여 실행하는 것이 좋습니다.
git stash pop 충돌이 나면 stash는 사라지나요?
충돌로 적용이 완전히 끝나지 않으면 stash 항목이 목록에 남아 있을 수 있습니다. 먼저 충돌 파일을 직접 수정하고 git add로 정리한 뒤, git stash list로 남은 항목을 확인합니다. 적용이 끝났고 더 이상 필요 없다면 git stash drop으로 삭제합니다.
git stash clear를 써도 괜찮나요?
git stash clear는 stash 목록 전체를 삭제하는 명령입니다. 현재 작업 파일을 직접 지우는 명령은 아니지만, stash에만 남겨 둔 변경사항을 한꺼번에 잃을 수 있습니다. 특정 항목 하나만 지우려면 git stash drop stash@{번호}를 사용하는 편이 안전합니다.
Git stash는 커밋하기 애매한 변경사항을 잠시 보관하는 도구이므로, 실행 전에는 항상 git status로 무엇을 저장하는지 먼저 확인하는 습관이 가장 중요합니다.
댓글