프로그래밍 관련 도구/Git

Git(stash 정리)

benjykim 2017. 8. 9. 16:50
반응형

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