Git Stash

설탕·2022년 2월 4일
0

Git

목록 보기
4/5
post-thumbnail

변경사항을 스테이시(stash)에 임시 저장하기

작업 중 다른 브랜치로 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 목록 조회

  • 현재 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에서 삭제

  • 저장내용을 현재 브랜치에 적용함과 동시에 stash 목록에서 제거한다. 즉 applydrop을 같이 한다고 볼 수 있다. 이때 git status 결과를 함께 보여준다.
  • git stash pop stash@{1}과 같이 stash ID를 명시하면 특정 스테이시를 복구할 수 있다. stash ID를 명시하지 않으면 가장 나중에 저장된 내용이 복구된다.

git stash apply : 현재 브랜치에 저장내용 복원 + stash list에서 삭제하지 않음

  • 복원된 저장내용을 stash 목록에서 drop하지 않는다.
  • stash에 저장된 내용을 여러 브랜치에 적용할 수 있다.

--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를 삭제해 준다.
  • stash ID를 명시하지 않으면 pop과 같이 나중에 저장된 내용이 먼저 삭제된다.

git stash show: stash에 저장된 내용 확인

  • stash ID를 명시하면 특정 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)을 삭제

  • stash 스택에 저장된 모든 임시 변경 사항을 한 번에 삭제한다.
profile
공부 기록

0개의 댓글