[Git/Github] Git 심화 명령어4 — stash(진행 중 작업 저장하기)

dEpayse
dEpayse_publication
5 min readAug 12, 2022

이번 포스트에서는 진행 중인 작업을 저장할 수 있는 stash에 대해 알아본다.

stash

stash 의 사전적인 의미는 ‘(안전한 곳에) 넣어두다.’라는 의미이다. 진행 중인 작업을 저장할 수 있는 기능을 말한다. 진행 중 작업이 있을 때, 커밋하지 않은 상태라면 다른 브랜치로 checkout 하는 것이 제한된다. 이럴 때 사용할 수 있는 기능이 git stash 이다.

working directory 와 stage 에 올라간(index된) 파일을 전부 저장하고, HEAD가 가리키는 커밋의 working directory 상태로 돌린다.

Fig1. git stash example

Fig1 은 git stash 의 동작을 git 의 개념에 맞춰 도식화한 그림이다. 명령어에서 특정 stash 를 지칭할 때 Fig1 에서 볼 수 있는 것 처럼 ‘stash@{n}’ 의 형태로 사용할 수 있다.

  • ‘first file.txt’ : working tree 에서 수정하여 git add 명령어를 통해 staging area 에 올렸다.
  • ‘second file.txt’ : working tree 에서 수정하고, staging area 에는 올리지 않았다.

stash 명령어를 사용하면 working tree 에서 변경사항이 생긴 것도, staging area 에 올라간 변경사항도 모두 stash 에 저장된다. stash 는 stack 형태로 관리되기 때문에 Fig1 과 같이 표현했다.

stash push, save

push, save 는 진행 중인 작업을 저장할 때 쓰는 명령어이다. save 는 deprecated 됐고, git 은 push 를 사용하는 것을 권한다. “-m” 플래그를 통해 어떤 이름으로 stash 에 저장할 건지 정할 수 있다. 아무 추가 명령어 없이 git stash 만 입력한다면 stash push 를 의미한다.

--all(-a) : ignore 된 파일들과 untracked 파일 전부를 포함하여 stash 한다.

--staged : stage 에 올라간 변경사항만 stash 한다.

--keep-index : stage 에 올라간 파일은 stash 하지 않고, 나머지 변경들만 stash 한다.

--include-untracked : 추적되지 않고 있는 파일들도 stash 에 포함한다. 기본값은 untracked 파일들은 포함하지 않는다.

--message (-m) : stashed state 에 이름을 붙여 stash 한다.

git stash push -m "스태시 테스트"

stash list

현재까지 stash 된 리스트들을 보고 싶을 때 stash list 를 사용한다. 보고 싶은 형태를 바꾸고 싶을 때 log-option 들을 입력하여 사용할 수 있다.

git stash list [<log-options>]

stash pop, apply

stash 에서 꺼내와서 현재 working directory 에 변경사항을 적용한다. pop 과 apply 가 다른 점은 pop 은 변경사항을 꺼낸 후 stash 에서 해당 stashed state 를 제거하고, apply 는 변경사항이 적용되기만 하고 stash 에 변화는 없다.

  • -index : stashed state 변경사항을 가져올 때 staged 된 상태로 만들어주는 것 까지 포함한다. 기본값은 staged 상태였던 파일을 자동으로 다시 staged 상태로 만들어주지 않는다.
git stash pop
git stash apply

stash branch

특정 stashed state 의 변경사항들을 적용한 새로운 브랜치를 만들고, 해당 브랜치로 checkout 하고 싶을 때 사용할 수 있는 명령어이다.

git stash branch branch_a

stash drop, clear

drop 은 특정 stashed state 를 stash 에서 제거하고, clear 는 stash 의 모든 stashed state 를 제거한다.

git stash drop
git stash clear

Reference

  1. [Git official — Book] — https://git-scm.com/book/en/v2
  2. [DesignLoper] “stash로 임시저장하기 + 특정 파일만 임시 저장하기” — https://im-designloper.tistory.com/64
  3. [BackLog] “누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하게 이용해보자~” — https://backlog.com/git-tutorial/kr/reference/stash.html
  4. [Lainyzine] “git stash 사용법: 커밋하지 않고 변경사항 저장하는 방법” — https://www.lainyzine.com/ko/article/git-stash-usage-saving-changes-without-commit/
  5. [heejeong Kwon] “git stash 명령어 사용하기” — https://medium.com/r/?url=https%3A%2F%2Fgmlwjd9405.github.io%2F2018%2F05%2F18%2Fgit-stash.html

--

--

dEpayse
dEpayse_publication

나뿐만 아니라 다른 사람들도 이해할 수 있도록 작성하는, 친절한 블로그를 목표로.