작업 중 다른 브랜치로 checkout
을 시도하면 다음과 같은 에러 메시지가 뜰 때가 있다.
$ git checkout feature/login
error: Your local changes to the following files would be overwritten by checkout:
src/pages/Main/Main.js
Please commit your changes or stash them before you switch branches.
Aborting
다른 브랜치로 checkout
하고 싶다면 commit
을 하거나 stash
하라고 나온다. 지금까지의 변경사항을 당장은 commit
하고 싶지 않다면 stash
에 임시 저장해둘 수 있다. git stash
를 이용하면:
stash
에 저장해두고 다른 브랜치로 이동하여 작업한 뒤에 다시 돌아와 복구하여 작업을 계속할 수 있다.git stash
명령어git stash
: stash로 안전하게 보관git stash save
의 축약형이다.git stash -m "임시 저장"
: commit
과 마찬가지로 -m 옵션을 사용하면 변경사항에 메시지를 붙일 수 있다.git stash list
: stash 목록 조회$ git stash list
stash@{0}: WIP on login: fca750c Add: fetch - 로그인 및 회원가입 서버와 통신하는 fetch 함수 추가
stash@{1}: WIP on main: 9c3b5f6 Add: 캐러셀 데이터 fetch - 캐러셀 2개의 상품 데이터를 서버에서 불러오는 fetch 함수 추가
stash@{2}: WIP on main: 17a9496 Merge branch 'master' into feature/main
git stash pop
: 현재 브랜치에 저장내용 복원 + stash list에서 삭제apply
와 drop
을 같이 한다고 볼 수 있다. 이때 git status
결과를 함께 보여준다.git stash pop stash@{1}
과 같이 stash ID를 명시하면 특정 스테이시를 복구할 수 있다. stash ID를 명시하지 않으면 가장 나중에 저장된 내용이 복구된다.git stash apply
: 현재 브랜치에 저장내용 복원 + stash list에서 삭제하지 않음
--index
옵션: 스테이지 상태까지 같이 복원하기
git stash pop
이나git stash apply
명령어를 사용할 때--index
옵션을 붙이면git add
한 스테이지 상태까지 같이 복원된다.$ git stash pop --index $ git stash apply --index
git stash drop
: stash에 저장된 내용 삭제git stash drop stash@{0}
처럼 stash ID를 명시하면 특정 stash를 삭제해 준다.git stash show
: stash에 저장된 내용 확인$ git stash show stash@{1}
src/pages/Main/Carousel/Carousel.js | 14 +++++++++-----
src/pages/Main/Main.js | 21 +++++++++++++++++++--
2 files changed, 28 insertions(+), 7 deletions(-)
git stash clear
: 모든 임시 변경사항(stash)을 삭제