stash
는 Git에서 제공하는 중요한 기능 중 하나로,
- 아직 커밋할 준비가 되지 않은 변경 사항을 임시로 저장하여
- working tree를 깨끗히 해야하는 경우 사용됨.
변경 등의 작업이 이루어진 경우,
해당 작업 내용은 Unstaged Area나 Staged Area 둘 중 하나에 위치함.
이때 만약 해당 작업을 commit하지 않고 다른 branch로 변경(switch)할 경우
해당 변경 사항이 같이 이동할 branch에 적용이 되기 때문에
기존의 branch 의 내용과 어긋날 경우 conflict가 일어나게 됨.
stash 가 필요한 상황
이 기능은 다음과 같은 다양한 상황에서 유용하게 활용됨.
작업 임시 중단하고 이 후 재개
- 작업을 중단해야 하지만 아직 커밋할 준비가 되지 않았을 때,
git stash
를 사용하여 현재 변경 사항을 저장하고- 작업을 재개할 수 있을 때 다시 불러와서 작업을 이어서 할 수 있음.
branch 전환
- (버그 수정 등으로 인해) 다른 branch로 전환해야 할 때,
- 현재 branch의 변경 사항을
stash
에 저장한 후 (commit을 할 정도로 완성된 상태가 아니라서) - 깨끗한 working tree 상태로 다른 branch로 이동 가능하게 해 줌.
병합 (merge
or rebase
등) 중 발생하는 conflict 해결
- merge 또는 rebase 에서 conflict 발생시,
- 현재 작업 내용을
stash
에 임시 저장하고 깨끗한 working tree로 만들어서 - 일단 병합 하고 임시 저장된 내용과의 conflict 를 일으키는 내용을 수정하고,
- 이후 stash의 저장된 작업을 다시 불러올 수 있음.
임시 저장
- 실험적인 변경을 시도하기 전에 현재 상태를
stash
에 저장하고, - 해당 실험이 종료하면 아까의 원래 상태로 쉽게 되돌리는데 사용 가능.
유용한 stash
관련 명령어
git stash save
:save
는 생략가능하며 기본로WIP
(Working In Progress) 라는 이름에 저장됨.
git stash list
:- 현재 stash에 저장된 목록(
list
)를 출력.
- 현재 stash에 저장된 목록(
git stash pop
:- stash 목록(list)에서 가장 최근 항목을 꺼내(
pop
) - 현재 branch에 적용하고
- 해당 항목을 stash list에서 제거합니다.
stash@{n}
로 번호n
을 통해 빼내고자 하는 항목을 지정할 수 있음.
- stash 목록(list)에서 가장 최근 항목을 꺼내(
git stash apply stash@{n}
:- 번호로 지정된 stash list 를
- 현재 branch에 적용.
- pop 과 달리 여전히 list 에 남아있는게 다른 점임.
stash@{n}
을 지정하지 않을 경우, 가장 최근 항목이 branch 에 적용됨.
git stash drop stash@{n}
:- stash list 에서
- 번호로 지정된 특정 stash 항목을 삭제.
- 번호를 지정하지 않은 경우 최근 항목이 삭제됨.
git stash clear
:- stash list 의 모든 스태시 항목을 삭제.
'utils > git and github' 카테고리의 다른 글
[Git] log: commit history 살펴보기 (0) | 2023.12.31 |
---|---|
[git] switch : branch 전환 (0) | 2023.12.31 |
[git] branch : branch를 생성하거나 확인 또는 삭제 및 변경 (0) | 2023.12.30 |
[git] revert : 특정 commit 취소하기. (1) | 2023.12.30 |
[git] .gitignore : 특정 resources를 git으로부터 격리. (1) | 2023.12.30 |