본문 바로가기

기타/Git

[git] git stash

반응형

git 을 사용하여 작업을 하던 중 branch 를 바꾸기 위해서 git check 을 시도하면 때로 변경사항이 있어서 브랜치를 변경할 수 없다며 commit 또는 stash 를 통해서 변경 사항을 저장하라고 한다. commit 은 변경사항을 local repository 에 저장하는 명령어인데 stash 는 어떤 명령어인지 몰라서 이번에 알아보려 한다.

 

 

1. git stash

 

git stash 란 워킹 디렉토리에서 수정한 파일들을 저장하는 명령어이다. stash modified 이면서 tracked 상태인 파일과 staging area 에 있는 파일들을 스택에 잠시 저장했다가 나중에 다시 저장할 수 있도록 해준다. 이를 통해서 아직 마무리 되지 않은 작업을 잠시 저장해두었다가 다른 브랜치에서 작업을 하고, 다시 돌아와서 저장해 둔 작업을 마무리 할 수 있도록 해준다.

 

다른 브랜치의 작업을 위해서 현재 작업이 마무리 되지 않은 경우에는 commit 을 하는 것이 정책이나 작업 프로세스 상에 불편할 수 있다. 이때 stash 를 사용하면 해당 작업을 잠시 keep 해두고 다른 작업을 하다가 다시 돌아와 마무리를 할 수 있다.

 

 

2. 사용법

 

# 현재 브랜치에서 수정 작업을 한 후 stash 명령어를 실행한다.
# stash 또는 stash save 명령어를 사용하는 경우 현재 modified 되고 tracked 된 수정 내용을 스택에 저장한다.
# 수정 내용을 저장한 후 워킹 디렉토리는 깨끗하게 작업 이전으로 돌아간다.
$ git stash

Saved working directory and index state WIP on test_stash: dc55cbc fix: print Hello Stash

# 현재 stash 스택에 저장된 목록을 확인할 수 있다.
$ git stash list

stash@{0}: WIP on test_stash: dc55cbc fix: print Hello Stash

# stash에 저장된 내역을 현재 소스에 적용하기 위해서는 apply 또는 pop 명령어를 사용할 수 있다.
# git stash apply 를 사용하면 가장 최근에 저장된 내용을 소스에 적용한다.
$ git stash apply

# stash 내역 중에 staged 상태였던 수정 내용이 있다면 apply 시에 --index 옵션을 사용하여 이를 staged 상태로 원복할 수 있다.
# 만약 --index 옵션을 사용하지 않는다면 staged 상태였던 수정 내용은 unstaged 상태로 적용된다.
$ git stash apply --index

# stash 이름을 주는 경우 해당 내용으로 변경한다.
$ git stash apply stash@{0}

# pop 은 변경 내용을 적용한 후 해당 내역을 stash list 에서 삭제한다.
$ git stash pop

# 삭제를 위해서는 drop 을 사용하면 된다.
# apply 와 동일하게 stash 이름을 주지 않는 경우에는 가장 최신의 수정 내역을 삭제한다.
$ git stash drop stash@{0}

 

 

[reference]

- https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning

반응형