반응형
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
반응형
'기타 > Git' 카테고리의 다른 글
[git] git hooks / pre-commit (0) | 2023.02.03 |
---|---|
[git] git 브랜치 병합 전략 (merge, rebase) (0) | 2022.06.15 |
[git] squash로 commit 합치기 (0) | 2021.10.30 |
[git] git submodule / subtree (0) | 2021.10.19 |
[git] git add, commit, push 취소하는 방법 (0) | 2021.04.05 |