Skip to content

IT의 모든것

개발 하는 사람들에게 도움이 될 만한 정보를 제공합니다.

Menu
Menu

Git Stash 사용법 총정리: 커밋 없이 작업 중인 코드 임시 저장하고 복원하는 법

Posted on 2026년 10월 07일2026년 10월 06일 by steve

 

Git Stash 완벽 가이드: 진행 중이던 미완성 코드를 지저분하게 커밋하지 않고 깔끔하게 임시 보관했다가 안전하게 복원하는 실무 핵심 비법을 알기 쉽게 정리해 드립니다!

코딩에 푹 빠져서 한창 집중하고 있는데, 갑자기 “지금 운영 서버에 치명적인 버그가 터졌으니 급하게 브랜치 전환해서 핫픽스 좀 해주세요!”라는 요청을 받아보신 적 있으신가요? 😱 저도 개발 초보 시절에는 이런 긴급 상황을 마주할 때마다 정말 눈앞이 캄캄해졌어요. 아직 완성되지도 않은 지저분한 코드를 ‘temp’나 ‘임시저장’ 같은 민망한 메시지로 억지로 커밋하거나, 최악의 경우 코드를 통째로 메모장에 복사해 두고 브랜치를 오가곤 했거든요.

하지만 Git에는 이런 상황을 단 몇 초 만에 깔끔하게 해결해 주는 마법 같은 구원투수가 있습니다. 바로 Git Stash예요! 작업 디렉터리의 수정 사항을 비밀 서랍 속에 쏙 넣어두듯 안전하게 치워두었다가, 다른 급한 일을 마친 뒤 언제든 다시 꺼내 쓸 수 있는 아주 든든한 기능이랍니다. 오늘은 Git Stash의 핵심 개념부터 필수 명령어, 그리고 실무에서 마주치는 꿀팁까지 제가 차근차근 알려드릴게요! 😊

 

1. Git Stash란 무엇이고 언제 사용할까요? 🤔

‘Stash’는 영어로 ‘안전한 곳에 넣어두다, 숨겨두다’라는 의미를 담고 있어요. 즉, Git Stash는 아직 커밋(Commit)할 준비가 되지 않은 작업 중인 변경 사항들을 임시 저장 스택(Stack)에 살짝 보관해 두는 기능입니다. 이 명령어를 실행하면 지저분했던 작업 공간이 마지막 커밋 상태(HEAD)로 깨끗하게 되돌아가요.

제가 실무를 하면서 Stash를 가장 유용하게 꺼내 쓰는 대표적인 세 가지 순간이 있습니다.

  • 갑작스러운 브랜치 전환: 다른 브랜치로 체크아웃해야 하는데 현재 수정한 파일들 때문에 Git이 브랜치 이동을 거부할 때
  • 원격 저장소 풀(Pull) 충돌 방지: 팀원의 최신 커밋을 내려받아야 하는데 내 로컬 변경점과 엉킬까 봐 불안할 때
  • 엉뚱한 브랜치에서 코딩했을 때: 새 기능 브랜치가 아니라 메인 브랜치에서 작업하던 코드를 그대로 안전하게 옮겨와야 할 때
💡 알아두세요!
Git Stash는 기본적으로 Git이 이미 버전을 추적하고 있는 ‘Tracked 파일’만 저장해요. 프로젝트에 새로 만들어 한 번도 git add를 거치지 않은 ‘Untracked 파일’은 기본 명령어로 저장되지 않으므로 추가 옵션이 필요합니다!

 

2. 핵심 명령어 4총사 비교와 활용법 📊

Git Stash는 주로 네 가지 핵심 명령어만 머릿속에 넣어두면 실무의 90% 이상을 막힘없이 다룰 수 있습니다. 특히 가장 혼동하기 쉬운 pop과 apply의 차이를 짚고 넘어가는 게 핵심이에요.

구분 명령어 주요 동작 실무 특징
임시 저장 git stash 작업 트리 수정 사항을 스택에 보관 워킹 디렉터리가 즉시 깨끗해짐
목록 조회 git stash list 저장된 스태시 전체 목록 확인 stash@{0}, stash@{1} 순서로 표기
복원 후 삭제 git stash pop 최신 스태시 적용 후 스택에서 제거 단발성 작업 복원에 가장 빈번하게 사용
복원 후 유지 git stash apply 최신 스태시 적용하되 스택에 보존 여러 브랜치에 동일 변경 적용 시 유리

이 둘을 일상에 빗대어 쉽게 이해해 볼까요? pop은 서랍에서 물건을 완전히 꺼내어 쓰는 것이고, apply는 서랍 속 서류를 복사해서 쓰고 원본은 그대로 남겨두는 것이에요. 실수를 방지하고 싶거나 백업이 필요하다면 apply를 먼저 사용해 보는 것도 안전한 전략이랍니다.

⚠️ 주의하세요!
git stash pop을 실행했을 때 현재 브랜치 코드와 충돌(Conflict)이 발생하면, Git은 소중한 코드가 유실되는 것을 막기 위해 스태시를 목록에서 자동으로 지우지 않습니다. 충돌을 모두 수정한 뒤 중복 적용을 막으려면 반드시 수동으로 git stash drop을 입력해 정리해 주세요!

 

3. 놓치기 쉬운 필수 옵션과 상황별 명령어 도구 🧮

그냥 옵션 없이 git stash만 반복해서 쓰다 보면 나중에 목록에 쌓인 작업물이 무엇인지 기억나지 않거나, 새로 생성했던 파일이 누락되어 곤혹스러울 때가 많아요. 실무 효율을 수직 상승시켜 주는 세 가지 핵심 옵션을 꼭 기억해 두세요.

📝 실무에서 매일 쓰는 알짜배기 옵션 모음

1) 신규 파일까지 통째로 보관: git stash -u (Untracked 파일까지 누락 없이 보관)

2) 알아보기 쉬운 메시지 지정: git stash push -m "로그인 폼 UI 작업중" (목록에서 바로 식별 가능)

3) 선택적 삭제 및 전체 청소: git stash drop stash@{0} (특정 항목 제거), git stash clear (전체 비우기)

🔢 상황별 Git Stash 명령어 생성기

현재 마주한 상황:

실행할 명령어:

동작 원리:

 

4. 실전 예시: 엉뚱한 브랜치에서 코딩했을 때 탈출법 📚

개발자라면 누구나 한 번쯤 메인(main) 브랜치나 엉뚱한 배포 브랜치에서 몇 시간 동안 신나게 코딩하다가 뒤늦게 식은땀을 흘려본 기억이 있을 거예요. 커밋을 생성하기 전이라면 Git Stash로 30초 만에 완벽하게 복구할 수 있습니다.

사례: 김개발 님의 잘못된 브랜치 작업 구출 작전

  • 현재 상황: 새 브랜치를 파지 않고 main 브랜치에서 파일 3개를 수정하고 새 컴포넌트 1개를 추가함
  • 해결 목표: 작성한 모든 코드를 온전히 보존하면서 새 브랜치인 feature/login으로 작업물 옮기기

3단계 탈출 가이드

1) 작업물 전체 임시 보관: git stash -u 명령어를 실행하여 새 파일까지 깔끔하게 서랍에 넣고 main 브랜치를 청소합니다.

2) 새 브랜치 생성 및 전환: git switch -c feature/login 으로 작업이 이루어졌어야 할 올바른 브랜치로 이동합니다.

3) 작업물 불러오기: git stash pop 을 실행하면 숨겨뒀던 코드들이 새 브랜치에 그대로 복원됩니다!

최종 결과

– main 브랜치: 불필요한 수정 흔적 없이 깔끔한 원본 상태 유지

– feature/login 브랜치: 공들여 작성한 코드가 고스란히 이동되어 바로 이어서 개발 및 커밋 가능

📌 알아두세요!
Stash는 특정 브랜치에 귀속되지 않고 Git 저장소 전체가 공유하는 ‘글로벌 공간’이에요. 그렇기 때문에 A 브랜치에서 stash로 숨겨두고 B 브랜치로 이동한 뒤 pop을 실행하면, 작업하던 변경 사항을 아주 자연스럽게 브랜치 간에 이동시킬 수 있답니다!

 

5. 마무리: 핵심 내용 요약 📝

오늘 함께 살펴본 Git Stash의 핵심 포인트를 네 줄로 일목요연하게 정리해 드릴게요.

  1. 작업 중단 시 임시 보관: 미완성 코드를 지저분하게 커밋하지 말고 git stash로 서랍에 넣어두세요.
  2. 새 파일 누락 방지: 새로 만든 untracked 파일이 있다면 반드시 -u 옵션을 붙여야 안전합니다.
  3. 메모 습관화: push -m "메시지"를 활용해 스태시가 쌓여도 나중에 헤매지 않도록 이름을 붙여주세요.
  4. pop과 apply의 구분: 꺼내고 바로 지울 때는 pop, 안전하게 남겨두고 싶을 때는 apply를 선택하세요.

💡

Git Stash 핵심 요약 치트시트

✨ 기본 임시 저장: git stash -u (신규 파일까지 빠짐없이 안전 보관)
📊 복원 및 정리: git stash pop (불러오고 삭제) / apply (불러오고 유지)
🧮 긴급 핫픽스 대응 프로세스:

작업 도중 급한 일 발생 ➔ git stash -u ➔ 브랜치 이동 후 해결 ➔ git stash pop

⚠️ 충돌 발생 주의: 충돌 시 pop 자동 삭제 안 됨 (해결 후 수동 drop 필수)

임시 저장 서랍을 비우지 않고 방치하면 나중에 헷갈릴 수 있으니 주기적으로 list를 확인하세요!

자주 묻는 질문 ❓

Q: git stash pop과 git stash apply의 가장 큰 차이점은 무엇인가요?
A: pop은 변경 사항을 복원함과 동시에 스택 목록에서 해당 스태시를 완전히 삭제합니다. 반면 apply는 변경 사항을 적용하되 스택 목록에 원본을 그대로 남겨두어, 동일한 작업을 여러 브랜치에 복제하거나 안전한 백업을 유지하고 싶을 때 유용합니다.

Q: 새로 생성한 파일이 git stash를 실행해도 숨겨지지 않는 이유는 무엇인가요?
A: Git Stash는 기본적으로 Git의 추적 대상(Tracked)인 수정 파일만 보관합니다. 아직 git add를 거치지 않은 새 파일(Untracked)까지 함께 저장하려면 반드시 git stash -u 또는 git stash --include-untracked 옵션을 사용하셔야 합니다.

Q: 스태시를 복원(pop)하는 도중 충돌(Conflict)이 발생하면 코드가 날아가나요?
A: 절대 사라지지 않습니다! 충돌이 발생하면 Git은 안전을 위해 스태시를 목록에서 지우지 않고 보존합니다. 충돌 표식을 해결하고 정상 커밋한 뒤, 더 이상 필요 없는 스태시는 git stash drop으로 수동 삭제해 주시면 됩니다.

Q: 저장해둔 스태시 목록 중에서 특정 작업 내용만 골라서 불러올 수 있나요?
A: 네, 가능합니다. git stash list로 목록을 확인한 뒤, 원하는 인덱스 번호를 지정하여 git stash apply stash@{1} 또는 git stash pop stash@{1} 형태로 실행하면 원하는 작업만 콕 집어 복원할 수 있습니다.

Q: 실수로 git stash drop이나 clear로 삭제한 스태시를 다시 되살릴 수 있나요?
A: Git의 가비지 컬렉터(GC)가 실행되기 전이라면 복구가 가능합니다. git fsck --unreachable 또는 reflog 추적을 통해 분실된 커밋(dangling commit) 해시를 찾은 뒤, 해당 해시를 체크아웃하거나 stash apply로 불러올 수 있습니다.


여기까지 Git Stash를 활용해 작업 중이던 코드를 깔끔하게 임시 저장하고 안전하게 복원하는 방법을 살펴보았습니다. 이제 더 이상 미완성 코드를 억지로 커밋하거나 메모장에 붙여넣으며 스트레스받지 마시고, Git Stash를 적극적으로 활용해 스마트한 개발 워크플로우를 완성해 보세요! 읽으시면서 궁금한 점이나 막히는 부분이 있다면 댓글로 편하게 물어봐주세요~ 😊

최신 글

  • 외부 라이브러리 소스 코드 디버깅법: console.log 없이 F11로 파헤치기
  • JetBrains 라이브 템플릿(Live Templates)으로 코딩 속도 2배 올리는 비법
  • console.log 그만! 브레이크포인트와 조건부 중단점으로 버그 10배 빨리 잡는 법
  • 자바와 C# 프로젝트 빌드 속도 70% 단축하는 필수 설정 꿀팁
  • JetBrains에서 Git 완벽 연동하기: 터미널 없이 끝내는 개발 생산성 가이드

보관함

  • 2026년 10월

카테고리

  • IT

소개 및 문의 · 개인정보처리방침 · 면책조항

©2026 IT의 모든것 | Design: Newspaperly WordPress Theme