Q. stash 란?
: stash는 '감추다', '숨겨두다'라는 뜻.
-> 브랜치를 활발하게 사용할 경우 사용
Q. stash하기 좋은 경우는 언제인가?
1. 브랜치에서 작업하던 내용이 다 끝나지 않았는데 다른 브랜치로 checkout해서 다른 일을 해야 하는 경우.
2. 끝나지 않은 작업을 커밋할 수는 없고 또한 커밋을 하지 않으면 체크아웃할 수 없는 경우.
-> 작업했던 내용을 어딘가 숨겨 놓을 수 있다. 브랜치의 가장 최신 커밋(헤드의 버전)으로 이동해서
현재 브랜치의 상태를 깔끔하게 만들고 다른 브랜치로 체크아웃할 수 있다.
* 들어가기 전 설정
1. git init > vim f1.txt (text : "a") > git add f1.txt > git commit -m "1"
2. git checkout -b exp //exp라는 새로운 브랜치를 만든다.
3. vim f1.txt (text : \n "b")
* 다음 과정
1. git checkout master
2. git status
-> exp에서 수정한 내용이 master 브랜치까지 영향을 준다.
3. git checkout exp
4. git status
Q. 수정했지만 커밋하기에는 애매한 소스를 어떻게 해야할까?
-> git stash --help 를 참고하자.
5. git stash (= git stash save)
-> Saved working directory and index state WIP on exp: 58efe04 1
( WIP : 워킹 인 프로세스 (=작업중) ,워킹디렉터리와 인덱스에 있는 변경사항들이 저장되었다. )
6. git status
-> 커밋할 것이 없다. ( 즉, f1.txt에서 수정했던 내용이 사라졌다. )
7. git checkout master
-> 이 상태에서 git checkout master를 하게 되면 작업/내용확인을 편하게 할 수 있다.
그 작업이 끝나면 exp 브랜치로 이동해서 작업을 계속 진행하면 된다.
8. git stash apply (master branch -> exp branch로 이동한 뒤 수행한 것임)
-> f1.txt가 살아나고 수정되었다. (stash한 것이 살아난 것을 볼 수 있다.)
9. git reset --hard HEAD
-> 수정했던 내용을 날림. ( 가장 최신의 커밋 상태로 돌아감. )
10. git status
-> 아무것도 커밋할 것이 없다고 나옴
Q. 스태쉬한 내용을 잃어 버린 것일까?
-> 아니다. git stash list 명령을 실행하면 여전히 남아 있고 이 상태에서 git stash apply 실행하면 다시 살아난다.
-> 즉, stash의 내용은 명시적으로 삭제하지 않으면 살아 있다.
11. vim f2.txt (text : "a") > git add f2.txt > git stash > git status
-> 수정사항이 나오지 않는다.
12. git stash list
13. git stash apply
-> 제일 위에 있는 stash를 적용한다.
-> 방금 처리한 stash : [0]에 위치한 내용
Q. stash 내용을 순차적으로 적용하려면 어떻게 해야 하는가?
-> git stash drop ( 가장 최신의 stash를 삭제 )
git stash list ( 하나만 남아 있음 )
( git stash apply; git stash drop; <-- 적용/삭제를 한번에 할 수 있다. )
14. git status, git stash list
-> 모두 살아 난 상태이고 아무것도 나오지 않음
15. git reset --hard, git status
-> 다 지워서 아무것도 안나온다.
16. vim f1.txt (text : "b") > git add f1.txt > git stash > git status
-> 변경사항이 없어진다.
17. git stash pop
-> stash가 apply + drop 모두 진행된다.
* 참고 : 추적되지않는 파일은 stash를 사용할 수 없다. 꼭 add를 해서 파일을 추적해야지만
stash를 사용할 수 있다.
*이 포스트는 이고잉님의 '지옥에서 온 Git'강의를 참고하여 작성했습니다.
URL : https://opentutorials.org/course/2708
'프로그래밍 관련 도구 > Git' 카테고리의 다른 글
Git(branch의 원리) (0) | 2017.08.10 |
---|---|
Git(branch_merge_conflict 정리) (0) | 2017.08.04 |
Git(branch_merge 정리) (0) | 2017.08.03 |
Git(branch_log,diff 정리) (0) | 2017.08.02 |
Git(branch 정리) (0) | 2017.08.02 |