커밋 없이 브랜치 전환할 때? git stash 사용법 실전 예제

한창 작업 중이던 코드를 커밋 없이 잠시 숨기고 다른 브랜치로 급하게 전환해야 할 때, 난감함을 느끼신 적 있으실 겁니다.

이런 상황은 변경 사항을 저장하긴 해야 하지만 아직 커밋할 준비는 되지 않았거나, 예상치 못한 긴급 이슈가 발생했을 때 주로 발생합니다.

이 글에서는 Git의 `git stash` 명령어를 활용하여 현재 작업을 안전하게 보관하고 필요할 때 다시 불러오는 다양한 방법을 실전 예제와 함께 단계별로 자세히 안내합니다.

이 글의 핵심

– `git stash`는 커밋 없이 변경 사항을 임시 저장하는 강력한 기능입니다.
– `save`, `list`, `apply`, `pop`, `drop`, `clear` 등 6가지 핵심 명령어의 실전 활용법을 익힐 수 있습니다.
– 특정 파일만 숨기거나 추적되지 않는 파일까지 포함하여 보관하는 고급 스태시 전략을 이해합니다.
– 여러 스태시를 효율적으로 관리하고 스태시 적용 시 발생할 수 있는 충돌을 해결하는 방법을 배웁니다.

한 줄 답변

git stash는 커밋하지 않은 변경사항을 임시 저장하여 브랜치 전환을 가능하게 하고, 나중에 다시 적용하는 방법을 제공합니다.

`git stash`는 언제, 왜 사용해야 할까요?

`git stash`는 Git에서 현재 작업 중인 변경 사항을 임시로 저장해두는 명령어입니다. 아직 커밋할 준비가 되지 않았지만, 다른 브랜치로 전환해야 하거나 긴급한 작업을 처리해야 할 때 유용합니다. 마치 작업 내용을 잠시 서랍에 넣어두고 다른 일을 한 뒤, 필요할 때 다시 꺼내 쓰는 것과 같습니다.

주로 다음과 같은 3가지 시나리오에서 `git stash`를 사용합니다. 첫째, 현재 브랜치에서 작업 중인데 갑자기 다른 브랜치로 이동하여 긴급 버그를 수정해야 할 때. 둘째, 작업 중인 내용을 동료와 공유하기 전에 잠시 다른 변경 사항을 확인해야 할 때. 셋째, Pull Request를 올리기 전 원격 저장소의 최신 변경 사항을 받아와야 하는데, 로컬에 커밋되지 않은 변경 사항이 있을 때입니다. 이 모든 상황에서 `git stash`는 작업 흐름을 끊기지 않게 도와주는 핵심 도구입니다.

`git stash`는 개발자의 생산성을 높이고 유연한 작업 환경을 제공합니다. 불필요한 임시 커밋을 만들지 않고도 작업 내용을 안전하게 보관할 수 있다는 점이 가장 큰 장점입니다. 지금부터 `git stash`를 단 5단계로 사용하는 기본적인 흐름을 살펴보겠습니다.

  1. 작업 내용 임시 저장 — `git stash save “메시지”` 또는 `git stash` 명령어로 현재 작업 내용을 스태시합니다.
  2. 스태시 목록 확인 — `git stash list` 명령어로 현재 저장된 스태시 목록을 확인합니다. 각 스태시는 고유한 인덱스를 가집니다.
  3. 다른 작업 수행 — 브랜치 전환, 버그 수정, 코드 풀링 등 필요한 작업을 진행합니다.
  4. 스태시 적용 (복원) — `git stash apply` 또는 `git stash pop` 명령어로 스태시된 내용을 다시 현재 작업 브랜치에 적용합니다.
  5. 스태시 정리 — 필요 없는 스태시는 `git stash drop` 또는 `git stash clear`로 삭제합니다.
git stash 사용법 완벽 가이드

Photo by Gundula Vogel on Pexels

`git stash` 핵심 명령어 완벽 가이드

`git stash`는 단순히 변경 사항을 숨기는 것 외에도 다양한 서브 명령어를 통해 세밀하게 관리할 수 있습니다. 여기서는 `git stash`의 핵심이 되는 6가지 명령어를 자세히 살펴보고 실용적인 예제를 제공합니다.

가장 기본이 되는 명령어는 `git stash` 또는 `git stash save “메시지”`입니다. 메시지를 포함하면 나중에 어떤 내용을 스태시했는지 쉽게 파악할 수 있어 효율적입니다. 저장된 스태시 목록은 `git stash list` 명령어를 통해 언제든지 확인할 수 있으며, 각 스태시는 `stash@{0}`, `stash@{1}`과 같은 형식으로 인덱싱됩니다. 가장 최근의 스태시가 `stash@{0}`입니다.

git stash save "feat: 새로운 기능 작업 중 임시 저장"
git stash list

스태시된 내용을 다시 작업 영역으로 불러올 때는 `git stash apply`와 `git stash pop` 두 가지 명령어를 사용할 수 있습니다. 이 둘의 가장 큰 차이점은 스태시 목록에서 해당 내용을 제거하는지 여부입니다. `apply`는 스태시를 남겨두어 여러 번 재적용이 가능하며, `pop`은 스태시를 적용한 후 스태시 목록에서 즉시 제거합니다. 일반적으로 한 번만 적용할 내용이라면 `pop`을 사용하는 것이 스태시 목록을 깔끔하게 유지하는 데 좋습니다. 특정 스태시를 적용하려면 `git stash apply stash@{1}`처럼 인덱스를 지정합니다.

더 이상 필요 없는 스태시는 `git stash drop` 명령어로 삭제할 수 있습니다. 마찬가지로 인덱스를 지정하여 `git stash drop stash@{2}`와 같이 사용합니다. 모든 스태시를 한 번에 지우고 싶다면 `git stash clear`를 사용합니다. 이 명령어는 스태시 목록을 약 30초 안에 완전히 비워주므로 신중하게 사용해야 합니다.

구분 `git stash apply` `git stash pop`
스태시 목록 유지 여부 유지 (재적용 가능) 제거 (한 번만 적용)
주요 사용 시나리오 동일한 스태시를 여러 브랜치에 적용하거나, 여러 번 적용을 시도할 때 한 번 적용 후 더 이상 필요 없을 때 (가장 일반적인 경우)
git stash 사용법 완벽 가이드

Photo by FOX ^.ᆽ.^= ∫ on Pexels

특정 파일만 숨기거나 추적되지 않는 파일도 함께 숨기기

기본적으로 `git stash`는 Git이 추적하는 파일(tracked files) 중 변경된 내용만 저장합니다. 즉, 새로 생성된 파일이 아직 `git add` 되지 않았다면 스태시되지 않습니다. 하지만 특정 상황에서는 추적되지 않는 파일이나 심지어 `.gitignore`에 의해 무시되는 파일까지 함께 스태시해야 할 필요가 있습니다.

새로 생성된 파일(untracked files)까지 스태시하려면 `–include-untracked` 또는 `-u` 옵션을 사용합니다. 예를 들어, 새로운 테스트 파일을 만들었는데 아직 `git add .`를 하지 않은 상태라면 이 옵션으로 함께 스태시할 수 있습니다. `.gitignore`에 의해 무시되는 파일(ignored files)까지 모두 포함하여 스태시하려면 `–all` 또는 `-a` 옵션을 사용합니다. 이 옵션은 매우 강력하므로, 사용 시 내용이 불필요하게 스태시되지 않도록 주의해야 합니다.

# 추적되지 않는 파일 포함
git stash save -u "새로운 파일 포함하여 임시 저장"

# .gitignore에 의해 무시되는 파일까지 모두 포함
git stash save -a "모든 파일을 임시 저장"

또한, 특정 파일이나 특정 변경 내용만 선택적으로 스태시하고 싶을 때는 `–patch` 또는 `-p` 옵션을 사용할 수 있습니다. 이 옵션은 Git의 대화형 인터페이스를 통해 변경된 각 파일 또는 각 hunk(변경 묶음)에 대해 스태시할지 여부를 묻습니다. 이는 매우 세밀한 스태시 관리를 가능하게 해주지만, 작업이 다소 복잡해질 수 있습니다.

주의
`git stash –all` 명령어를 사용할 때는 신중해야 합니다. `.gitignore`에 명시된 파일(예: 빌드 결과물, 로그 파일, 의존성 모듈)까지 스태시될 수 있으며, 이는 나중에 불필요하게 큰 스태시를 복원해야 하는 상황을 만들 수 있습니다. 반드시 필요한 경우에만 이 옵션을 사용하는 것이 좋습니다.
git stash 사용법 완벽 가이드

Photo by Magda Ehlers on Pexels

여러 스태시 관리 및 충돌 해결 전략

개발을 하다 보면 여러 번 스태시를 사용하게 되고, 스태시 목록이 쌓일 수 있습니다. `git stash list`로 목록을 확인했을 때 어떤 스태시가 어떤 내용인지 헷갈릴 수 있으므로, 처음 스태시할 때 `git stash save “의미 있는 메시지”` 형태로 메시지를 남기는 습관을 들이는 것이 좋습니다.

특정 스태시를 복원하거나 삭제하고 싶을 때는 해당 스태시의 인덱스를 지정하여 명령어를 실행합니다. 예를 들어, 목록에서 두 번째(`stash@{1}`) 스태시를 적용하려면 `git stash apply stash@{1}`를, 삭제하려면 `git stash drop stash@{1}`을 사용합니다. 이처럼 인덱스를 활용하면 여러 스태시를 효율적으로 관리할 수 있습니다.

스태시를 적용할 때, 현재 브랜치에 있는 내용과 스태시 내용이 충돌할 수 있습니다. 이는 마치 Git Merge 또는 Rebase 시 발생하는 충돌과 유사하며, Git은 충돌을 표시하고 사용자에게 수동으로 해결하도록 요구합니다. 충돌이 발생하면 파일을 열어 충돌 마커(<<<<<<<, =======, >>>>>>>)를 찾아 해결한 후, `git add`로 변경 사항을 스테이징하고 `git commit`으로 마무리하면 됩니다.

참고
스태시를 적용하다가 충돌이 발생하고 이를 해결하기 어려울 때는 `git stash show -p` 명령어로 스태시 내용을 자세히 확인하는 것이 도움이 될 수 있습니다. 또한, 충돌 해결 후 스태시가 더 이상 필요 없다면 `git stash drop`으로 목록에서 제거하는 것을 잊지 마세요. 만약 스태시된 내용을 새 브랜치로 만들고 싶다면, `git stash branch <새 브랜치 이름> [stash@{n}]` 명령어를 사용하여 스태시 내용을 기반으로 새로운 브랜치를 생성하고 해당 스태시를 자동으로 제거할 수 있습니다.
정리

지금까지 `git stash`의 기본적인 사용법부터 특정 파일 포함, 스태시 관리, 충돌 해결까지 다양한 실전 예제를 통해 자세히 살펴보았습니다. `git stash`는 개발 워크플로우를 유연하고 효율적으로 만들어주는 필수적인 Git 명령어입니다.

이 글에서 다룬 내용을 통해 여러분의 Git 사용 경험이 한층 더 향상되기를 바랍니다. 지금 바로 적용해 보세요.

참고 자료

동영상으로 보는 git stash 사용법 완벽 가이드

글로 충분하지 않다면 관련 영상을 함께 보세요. 클릭하면 YouTube에서 검색 결과로 이동합니다.

▶ YouTube에서 “git stash 사용법 완벽 가이드” 영상 보기

자주 묻는 질문

Q. git stash는 정확히 어떤 상황에서 사용해야 하나요?

A. git stash는 현재 작업 중인 내용을 커밋하지 않은 상태에서 다른 브랜치로 전환해야 하거나 긴급한 작업을 처리해야 할 때 유용합니다. 작업 디렉토리와 스테이징 영역을 깨끗하게 비워주어 다른 작업을 시작할 수 있게 변경사항들을 임시로 저장해 줍니다.

Q. git stash로 저장한 내용을 다시 가져오려면 어떻게 해야 하나요?

A. git stash list 명령으로 저장된 stash 목록을 확인한 후, git stash apply를 사용하여 현재 작업 디렉토리에 변경사항을 적용할 수 있습니다. 만약 적용 후 stash 목록에서 해당 내용을 제거하고 싶다면 git stash pop 명령을 사용하면 됩니다.

Q. git stash apply와 git stash pop의 차이점은 무엇인가요?

A. git stash apply는 stash에 저장된 변경사항을 작업 디렉토리에 적용하지만, stash 목록에서는 해당 내용을 제거하지 않습니다. 반면, git stash pop은 변경사항을 적용함과 동시에 stash 목록에서 해당 stash를 제거합니다. 일반적으로 한 번만 적용할 경우에는 pop이 더 편리합니다.

Q. git stash로 모든 변경사항이 아니라 특정 파일이나 일부분만 stash할 수도 있나요?

A. 네, git stash는 모든 변경사항 외에 특정 부분만 stash할 수도 있습니다. git stash push -p (또는 –patch) 명령을 사용하면 인터랙티브 모드로 스테이징되지 않은 변경사항 중 원하는 청크(hunk)만 선택하여 stash할 수 있습니다.



댓글 남기기

Mebys Blog에서 더 알아보기

지금 구독하여 계속 읽고 전체 아카이브에 액세스하세요.

계속 읽기