브랜치 전환 중 작업 날릴까 걱정될 때? git stash 실전 예제로 안전하게

다른 브랜치에서 급한 버그 수정 요청이 들어왔는데, 지금 작업하던 내용을 커밋하기 애매해서 브랜치 전환하기 망설여졌던 적이 있나요?

현재 작업 내용을 커밋하기에는 너무 미완성이거나, 작업 단위가 너무 커서 하나의 깔끔한 커밋으로 남기기 부담스러울 때 이런 난처한 상황에 직면하게 됩니다.

이 글에서는 Git Stash 명령어를 활용해 현재 작업을 안전하게 임시 저장하고 필요할 때 다시 불러오는 실전 예제를 단계별로 설명하여, 당신의 개발 흐름을 끊김 없이 이어갈 수 있도록 돕겠습니다.

이 글의 핵심

– Git Stash는 커밋하기 애매한 미완성 작업을 임시로 저장하여 브랜치 전환 등 긴급 상황에 대응할 수 있게 합니다.
– `git stash push`와 `git stash apply/pop` 등 핵심 명령어를 통해 작업을 안전하게 보관하고 복원하는 4가지 기본 방법을 익힙니다.
– 특정 파일만 Stash하거나 여러 Stash를 효율적으로 관리하는 3가지 심화 기법과 함께, Stash 사용 시 반드시 알아야 할 주의사항을 다룹니다.

Git Stash, 왜 필요할까요?

개발을 하다 보면 예상치 못한 상황이 종종 발생합니다. 한창 기능을 개발하던 도중, 프로덕션 환경에서 긴급한 버그가 발견되어 즉시 수정해야 할 때가 대표적입니다. 이때 현재 작업 중인 내용을 커밋하지 않은 상태라면, Git은 작업 디렉토리가 ‘더럽다(dirty)’고 판단하여 브랜치 전환을 허용하지 않습니다. 그렇다고 미완성된 코드를 임시 커밋으로 남기면 Git 커밋 히스토리가 불필요한 기록으로 지저분해지기 쉽습니다.

이런 상황에서 `git stash`는 당신의 구원투수가 될 수 있습니다. Stash는 현재 작업 디렉토리의 변경 사항(수정된 파일, 스테이징된 파일)을 Git의 임시 저장 영역에 잠시 보관해두고, 작업 디렉토리를 깨끗한 상태로 되돌려줍니다. 마치 책상 위의 복잡한 서류들을 잠시 서랍에 넣어두고 깨끗한 상태에서 다른 작업을 시작하는 것과 같습니다.

Stash를 사용하면 불완전한 코드를 강제로 커밋하지 않아도 되며, 작업의 연속성을 해치지 않고 급한 요청에 유연하게 대응할 수 있습니다. 이는 개발자의 워크플로우를 크게 개선하고, 더욱 깔끔하고 효율적인 코드 관리 습관을 형성하는 데 도움을 줍니다.

참고
Git Stash는 작업 중인 변경 사항을 커밋하지 않고도 깨끗한 작업 디렉터리를 만들 수 있게 해주는 강력한 도구입니다. 이는 불필요한 임시 커밋을 남기지 않고 브랜치를 전환하거나 긴급한 작업을 처리할 때 매우 유용합니다.
git stash 사용법 실전 예제

Photo by Daniil Komov on Pexels

Git Stash 기본 사용법: 임시 저장부터 복원까지 4단계

`git stash`의 핵심은 간단합니다. 현재 작업을 잠시 치워두고, 필요할 때 다시 불러오는 것입니다. 다음 4가지 단계를 통해 기본적인 Stash 사용법을 익혀보겠습니다.

  1. 작업 임시 저장하기 — `git stash push -m “긴급 버그 수정 전 작업”` 명령으로 현재 변경 사항을 임시 저장합니다. 메시지를 생략하고 `git stash`만 사용해도 되지만, 메시지를 남기면 나중에 어떤 작업이었는지 쉽게 파악할 수 있습니다. 이 명령은 수정된 파일과 스테이징된 파일들을 저장하며, 기본적으로 추적되지 않은 파일들은 포함하지 않습니다.
  2. 저장된 Stash 확인하기 — `git stash list` 명령으로 저장된 stash 목록을 확인합니다. `stash@{0}`과 같은 형식으로 표시되며, 메시지를 지정했다면 더 쉽게 알아볼 수 있습니다. 가장 최근의 stash가 `stash@{0}`으로, 그 다음이 `stash@{1}`로 표시됩니다.
  3. Stash 내용 복원하기 — 가장 최근 stash를 복원하려면 `git stash apply` 또는 `git stash pop`을 사용합니다. `apply`는 stash 내용을 작업 디렉토리에 적용하지만, stash는 스택에 그대로 남겨둡니다. 반면 `pop`은 적용 후 해당 stash를 스택에서 제거합니다. 특정 stash를 복원하려면 `git stash apply stash@{1}`처럼 인덱스를 지정합니다. 일반적으로 한 번 사용하고 스택에서 제거할 때는 `pop`을, 여러 번 적용하거나 다른 브랜치에서 다시 적용할 가능성이 있다면 `apply`를 사용합니다.
  4. 복원 후 Stash 삭제하기 — `apply`를 사용했거나, 더 이상 필요 없는 stash가 있다면 수동으로 `git stash drop stash@{0}` 명령을 이용해 스택에서 제거할 수 있습니다. 모든 stash를 한 번에 제거하려면 `git stash clear`를 사용합니다.

이 4단계만 숙지해도 대부분의 상황에서 `git stash`를 능숙하게 활용할 수 있습니다. 급한 상황에서 당황하지 않고 작업을 안전하게 보관하고 복원하는 습관을 들이는 것이 중요합니다.

git stash 사용법 실전 예제

Photo by cottonbro studio on Pexels

Git Stash 심화 활용: 특정 파일 관리 및 여러 Stash 처리

`git stash`는 단순히 모든 변경 사항을 저장하는 것 외에도 다양한 옵션을 통해 더 세밀한 제어가 가능합니다. 특히 추적되지 않은 파일이나 특정 파일만 Stash하는 기능은 매우 유용합니다. 여기서는 3가지 주요 심화 활용법을 소개합니다.

명령 대상 변경 사항 특징
`git stash` 또는 `git stash push` 수정된 파일 및 스테이지에 올라간 파일 기본 동작. 추적되지 않은 파일 및 무시된 파일은 포함 안 됨. 가장 안전함.
`git stash push -u` 또는 `–include-untracked` 위 항목 + 추적되지 않은 파일 새로 생성된 파일(예: 개발 중인 새 클래스)도 임시 저장해야 할 때 유용.
`git stash push -a` 또는 `–all` 위 항목 + 무시된 파일 (.gitignore에 명시된 파일) 매우 강력하지만, 빌드 부산물 등 의도치 않은 파일까지 저장할 수 있으므로 주의 필요.

특정 파일만 Stash하고 싶다면 `git stash push — path/to/file` 명령을 사용합니다. 예를 들어, `git stash push — src/main.js`는 `src/main.js` 파일의 변경사항만 Stash하고 나머지는 그대로 유지합니다. 이 기능은 하나의 작업에 여러 파일이 연관되어 있지만, 특정 파일만 빠르게 처리해야 할 때 매우 유용합니다.

또한, `git stash show` 명령을 통해 특정 stash의 변경 내용을 볼 수 있습니다. `git stash show stash@{1}`처럼 인덱스를 지정하거나, `git stash show -p`를 통해 실제 코드 변경 내용을 diff 형태로 확인할 수 있어, 여러 개의 stash가 쌓였을 때 어떤 내용을 담고 있는지 명확하게 파악할 수 있습니다.

git stash 사용법 실전 예제

Photo by Lukas Blazek on Pexels

Git Stash 사용 시 주의할 점

`git stash`는 매우 유용한 도구이지만, 몇 가지 주의사항을 인지하고 사용해야 합니다. 첫째, Stash는 ‘임시 저장’이라는 본연의 목적을 잊어서는 안 됩니다. 중요한 작업 내용을 Stash에만 의존하여 장기간 보관하는 것은 위험합니다. Stash는 영구적인 버전 관리 솔루션이 아니며, Git의 커밋 히스토리에 포함되지 않기 때문에 관리 소홀로 인해 소실될 위험이 있습니다.

둘째, Stash를 적용(apply/pop)할 때 현재 브랜치의 내용과 Stash 내용 사이에 충돌이 발생할 수 있습니다. 특히 Stash를 생성한 시점으로부터 현재 브랜치가 크게 변경되었다면 충돌 가능성이 높아집니다. Git은 충돌이 발생하면 이를 사용자에게 알리며, 이때는 일반적인 Git 병합(merge) 충돌과 마찬가지로 수동으로 해결해야 합니다. 이러한 번거로움을 피하려면 Stash는 되도록 짧은 시간 내에 원래 브랜치에 커밋하거나 정리하는 것이 좋습니다.

셋째, `git stash`는 현재 브랜치에 국한되지 않고 Git 레포지토리 전반에 걸쳐 관리되는 전역적인 스택입니다. 따라서 A 브랜치에서 Stash를 생성한 후 B 브랜치로 전환하여 Stash를 적용(pop)하면, A 브랜치의 변경 사항이 B 브랜치에 적용됩니다. 이는 때로는 편리하지만, 의도치 않은 브랜치에 변경 사항이 적용되는 상황을 만들 수도 있으므로 주의해야 합니다.

주의
Git Stash는 편리하지만 임시 저장소임을 명심해야 합니다. 여러 개의 stash가 쌓이면 관리하기 어려워질 수 있으며, 너무 오래된 stash는 적용 시 충돌을 일으킬 가능성이 높아집니다. 중요한 작업은 되도록 빠른 시일 내에 브랜치에 커밋하는 것이 좋습니다. 또한, stash는 현재 브랜치에 저장되는 것이 아니라 Git 레포지토리 전체에 걸쳐 관리되므로, 다른 브랜치에서 stash를 pop하면 해당 브랜치에 변경사항이 적용됩니다.
정리

Git Stash는 브랜치 전환이나 긴급 버그 수정과 같이 현재 작업을 중단하고 다른 업무를 처리해야 할 때 매우 유용한 기능입니다. `git stash push`로 작업을 안전하게 보관하고, `git stash list`로 확인 후 `git stash apply` 또는 `pop`으로 간편하게 복원할 수 있습니다. 또한, 추적되지 않은 파일이나 특정 파일만 Stash하는 심화 기능을 통해 더욱 유연한 개발 환경을 구축할 수 있습니다.

지금 바로 적용해 보세요.

참고 자료

동영상으로 보는 git stash 사용법 실전 예제

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

▶ YouTube에서 “git stash 사용법 실전 예제” 영상 보기

자주 묻는 질문

Q. git stash는 정확히 어떤 기능을 하나요?

A. `git stash`는 현재 작업 중인 변경사항(수정된 파일 및 스테이지된 파일)을 임시로 저장하고, 작업 디렉토리를 마지막 커밋 상태로 깨끗하게 되돌려줍니다. 이를 통해 아직 커밋하기에는 부담스러운 변경사항을 안전하게 보관하면서 다른 브랜치로 전환하거나 긴급한 작업을 할 수 있습니다.

Q. `git commit` 대신 `git stash`를 언제 사용해야 할까요?

A. `git stash`는 현재 작업이 아직 미완성 단계라 커밋하기에는 적절하지 않지만, 다른 브랜치로 이동해야 하거나 긴급한 버그를 수정해야 할 때 유용합니다. 불완전한 코드를 커밋 이력에 남기지 않고 임시로 보관해야 할 때 최적의 선택입니다.

Q. 스태시한 변경사항을 다시 가져오려면 어떻게 해야 하나요?

A. `git stash apply` 명령을 사용하면 가장 최근에 스태시한 변경사항을 현재 작업 디렉토리에 적용할 수 있습니다. 변경사항을 적용하면서 스태시 목록에는 남겨두고 싶을 때 사용하고, 적용 후 스태시 목록에서 삭제하고 싶다면 `git stash pop`을 사용하면 됩니다.

Q. 여러 개의 변경사항을 스태시할 수 있나요? 또 어떻게 관리하나요?

A. 네, `git stash`는 여러 번 사용하여 여러 개의 변경사항 세트를 독립적으로 스태시할 수 있습니다. `git stash list` 명령으로 모든 스태시 목록을 확인할 수 있으며, `git stash apply stash@{인덱스}` 또는 `git stash pop stash@{인덱스}`를 사용하여 특정 스태시를 선택적으로 적용하거나 제거할 수 있습니다.

댓글 남기기

Mebys Blog에서 더 알아보기

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

계속 읽기