git stash로 작업 내용 잠깐 치워두기
2분 읽기
작업 중에 갑자기 다른 브랜치로 이동해야 할 때가 있습니다. 커밋하기엔 아직 이른 상태인데, 그냥 이동하자니 변경 사항이 충돌할 수 있습니다. 이럴 때 git stash가 필요합니다.
git stash링크를 제목에 복사
커밋하지 않은 변경 사항이 있는 상태에서 브랜치를 이동하면 충돌이 발생할 수 있습니다. git stash를 사용하면 변경 사항을 스택에 임시 저장하고 워킹 디렉토리를 깨끗하게 비울 수 있습니다. 그래서 브랜치를 자유롭게 이동한 뒤, 필요할 때 다시 꺼내 쓸 수 있습니다.
stash 하위에는 list, show, drop, pop, apply, branch, push, clear 같은 서브 커맨드들이 있습니다. 더 자세한 내용은 아래 명령어로 확인할 수 있습니다.
git stash --helpstash를 어떻게 만드나요?링크를 제목에 복사
기본 사용법은 간단합니다. 메시지를 붙이면 나중에 목록을 볼 때 구분하기 쉽습니다.
git stash
git stash -m "작업 중인 기능 A"기본적으로 git stash는 Git이 추적 중인 파일만 저장합니다. 추적되지 않은 파일(untracked)까지 포함하려면 -u 옵션을 추가합니다.
git stash -u
git stash --include-untrackedstaged 파일은 그대로 두고 unstaged 변경 사항만 stash하고 싶다면 --keep-index를 사용합니다. 예를 들어 버그 수정은 git add로 올려뒀는데, 아직 작업 중인 다른 코드가 함께 있어서 커밋 전에 치워야 할 때 유용합니다.
# 버그 수정만 staged 상태로 남기고, 나머지 작업 중인 코드는 stash
git stash --keep-index변경된 파일 중 일부만 골라서 저장하고 싶다면 --patch 옵션으로 대화형 모드를 사용할 수 있습니다.
git stash --patch저장된 stash는 어떻게 확인하나요?링크를 제목에 복사
stash는 스택 구조로 쌓입니다. list로 전체 목록을 확인하고, show로 특정 stash의 변경 내용을 볼 수 있습니다.
git stash list# 가장 최근 stash의 변경 내용을 요약해서 보여줍니다.
git stash show
# 변경 내용을 diff 형태로 자세히 보여줍니다.
git stash show -pstash를 다시 적용하려면 어떻게 하나요?링크를 제목에 복사
apply는 stash를 적용하되 스택에서 제거하지 않습니다. pop은 적용과 동시에 스택에서 삭제합니다. 재사용 가능성이 있다면 apply를, 한 번 쓰고 끝이라면 pop을 선택하면 됩니다.
git stash apply # 적용, 스택에 유지
git stash apply stash@{2} # 특정 stash 지정
git stash pop # 적용 + 삭제한 가지 주의할 점이 있습니다. apply는 staged 상태였던 파일을 자동으로 다시 staged로 만들어주지 않습니다. staged 상태까지 복원하려면 --index 옵션을 추가해야 합니다.
git stash apply --indexstash를 삭제하려면 어떻게 하나요?링크를 제목에 복사
drop으로 특정 stash를 삭제하거나, clear로 전체를 한 번에 비울 수 있습니다. apply 이후 정리할 때도 쓰지만, 필요 없어진 stash를 직접 제거할 때도 사용합니다.
git stash drop
# 특정 stash를 지정해 삭제합니다.
git stash drop stash@{0}
# 모든 stash를 한 번에 삭제합니다.
git stash clearstash 내용을 새 브랜치에 바로 적용할 수 있나요?링크를 제목에 복사
git stash branch를 사용하면 stash 시점의 커밋을 기준으로 새 브랜치를 만들고 변경 사항을 바로 적용합니다. 새 기능 브랜치를 만들거나 버그 수정 브랜치를 분리할 때 편리합니다.
git stash branch <branch-name>정리하면링크를 제목에 복사
git stash는 커밋하지 않은 변경 사항을 임시로 저장하는 도구입니다. 커밋을 대체하는 용도로 남용하거나 장기간 방치하지 않는 것이 좋습니다.- stash를 만들 때는
-m옵션으로 의미 있는 메시지를 남겨두세요. 메시지 없이 쌓인 stash는 시간이 지나면 무엇이 무엇인지 알아보기 어렵습니다. - 적용 후에는
drop으로 정리하거나pop으로 한 번에 처리하고, 주기적으로git stash list로 목록을 점검하세요.
관련 글
git pull의 동작 방식 이해하기
git pull이 fetch와 merge의 조합임을 이해하고, rebase 옵션을 활용해 선형적인 히스토리를 유지하는 방법을 정리합니다.
모든 글