728x90
반응형

0. stash란?
stash는 Git에서 제공하는 중요한 기능 중 하나로,
- 아직 커밋할 준비가 되지 않은 변경 사항을 임시로 저장하여
- working tree를 깨끗히 해야하는 경우 사용됨.
변경 등의 작업이 이루어진 경우,
해당 작업 내용은 Unstaged Area나 Staged Area 둘 중 하나에 위치함.
이때 만약 해당 작업을 commit하지 않고 다른 branch로 변경(switch)할 경우
해당 변경 사항이 같이 이동할 branch에 적용이 되기 때문에
기존의 branch 의 내용과 어긋날 경우 conflict가 일어나게 됨.
1. stash 가 필요한 상황
이 기능은 다음과 같은 다양한 상황에서 유용하게 활용됨.
1-0. 작업 임시 중단하고 이후 재개하려고 할 경우
- 작업을 우선 중단해야 하지만 아직 커밋할 준비가 되지 않았을 때,
git stash를 사용하여 현재 변경 사항을 저장하고- 작업을 재개할 수 있을 때 다시 불러와서 작업을 이어서 할 수 있음.
1-1. branch 전환
- (버그 수정 등으로 인해) 다른 branch로 전환해야 할 때,
- 현재 branch의 변경 사항을
stash에 저장한 후 (commit을 할 정도로 완성된 상태가 아니라서) - 깨끗한 working tree 상태로 다른 branch로 이동 가능하게 해 줌.
1-2. 병합 (merge or rebase 등) 중 발생하는 conflict 해결
- merge 또는 rebase 에서 conflict 발생시,
- 현재 작업 내용을
stash에 임시 저장하고 깨끗한 working tree로 만들어서 - 일단 병합 하고 임시 저장된 내용과의 conflict 를 일으키는 내용을 수정하고,
- 이후 stash의 저장된 작업을 다시 불러올 수 있음.
1-3. 임시 저장
- 실험적인 변경을 시도하기 전에 현재 상태를
stash에 저장하고, - 해당 실험이 종료하면 아까의 원래 상태로 쉽게 되돌리는데 사용 가능.
2. 유용한 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 의 모든 스태시 항목을 삭제.
같이보면 좋은 자료들
2024.05.20 - [utils/git and github] - [Git] Git Summary (작성중)
[Git] Git Summary (작성중)
git이란2024.05.20 - [utils/git and github] - Git : 소개 git 설치 후 해줘야 하는 작업들[Git] git 설치 후 우선 해줘야 하는 작업들 (tistory.com)local repository 초기화2024.05.20 - [utils/git and github] - [Git] init : local repo
ds31x.tistory.com
728x90
'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 |