7.1 스태시
작업 브랜치를 변경하려면 워킹 디렉터리는 깨끗한(clean) 상태로 정리되어 있어야 합니다. 워킹 디렉터리에 작업 중인 내용이나 커밋되지 않은 변경 사항들이 남아 있으면 브랜치를 변경할 수 없습니다. 예를 들어 브랜치에서 코드를 수정하는 도중에 새로운 버그가 발견됩니다. 또는 고객의 긴급한 요청으로 코드를 추가해야 하는 경우가 발생합니다. 하지만 현재 작업 중인 코드 역시 수정이 끝난 것은 아닙니다.
이러한 상황은 실제 개발 작업 과정에서 자주 발생합니다. 일부 커밋하지 않은 작업 내용이 남아 있다면 브랜치 간에 이동할 수 없습니다. 그럼 어떻게 현재 수정 작업을 멈추고, 다른 브랜치에 있는 코드를 수정할 수 있을까요? 이러한 상황에서는 스태시(stash) 기능을 사용할 수 있습니다. 스태시는 간단히 말해 ‘안전한 보관’입니다.
▼ 그림 7-1 스태시
깃은 완료되지 않은 작업(커밋되지 않은 변경 내용)이 남아 있을 때, 현재 작업을 임시로 저장할 수 있는 스태시 기능을 제공합니다. 스태시는 ‘현재 워킹 디렉터리 내역을 별도의 스택 영역에 잠시 보관하라’는 명령입니다. 스태시는 브랜치를 이동할 때 작업 중인 내용 때문에 워킹 디렉터리가 충돌하는 것을 방지하는 데 사용합니다.
스태시 명령을 실행하면 현재 작업 중인 내용은 임시 저장되고, 수정 전 마지막 커밋 상태로 돌아갑니다. 즉, 이전 커밋 후 작업하지 않은 상태의 워킹 디렉터리가 됩니다.