stash
26 Feb 2019
|
github
지옥에서 온 git
stash
- 감추다, 숨겨두다라는 뜻을 갖고 있는 단어
- 브랜치에서 작업중 branch에서 작업하던 내용을 끝내지 않고 다른 branch로 checkout을 해서 다른일을 해야 하는 경우에 사용
- stash 기능을 통해 작업이 끝나지 않은 작업을 commit하지 않고 작업했던 내용을 숨겨둘 수 있게 됨
- 해당 branch의 최신 커밋(HEAD version)으로 작업중 파일이 이동하여 현재 branch의 상태를 깔끔하게 만들고 다른 branch로 checkout할 수 있게 됨
- 새로운 디렉터리를 만들고
git init
으로 초기화
vim f1.txt
로 파일을 만들고 내용을 a로 저장, git add f1.txt
, git commit -m 1
로 버전을 만듦
- 이 상태에서 새로운 브랜치 만들기 위해
git checkout -b exp
로 exp 브랜치를 만듦
vim f1.txt
에서 내용 b를 추가하고 저장.
- 현재 상태에서
git checkout master
를 하면 git status
에서 exp브랜치에서 수정한 내용이 master에까지 영향을 주게 됨
git checkout exp
후 git status
를 확인하면 동일한 modified 붉은색 상태를 확인 가능
- 이럴 때 exp 브랜치에서 stash를 사용하면 됨
git stash --help
로 필요한 옵션 넣어 사용하면 됨
git stash
치면 working directory의 내용이 exp에 저장되었고 index도 저장 됨.
- 현재 WIP(Working in process)상태의 내용들이 저장되었다는 의미
git status
를 해 보면 commit 할 것이 없다고 뜸
- 즉, f1.txt는 수정한 내용을 갖고있지 않은 상태
git checkout master
로 master에서 작업을 자유롭게 할 수 있음
git checkout exp
로 이동하여 git stash apply
를 쳐 f1.txt가 살아나 modified 상태가 된 것을 확인
- f1.txt의 내용도 실제로 살아난 것을 볼 수 있음
git stash list
로 f1.txt에 대한 내용이 남아있음
git reset --hard HEAD
로 하면 최신 커밋 상태로 working copy를 보내게 됨(다 지우게 됨)
git status
를 하면 아무것도 커밋할것이 없다고 뜸
- 하지만 stash의 내용을 잃어버린것이 아님
git stash list
로 확인해보면 reset 전과 동일한 f1.txt에 대한 내용이 남아있는것을 확인 할 수 있음
git stash apply
를 하면 다시 f1.txt에 대한 내용이 다시 복원 된 것을 확인 가능
- 즉, stash list의 내용은 명시적으로 삭제하지 않으면 항상 살아있게 됨
git reset --hard
로 초기화 후 vim f2.txt
에서 내용을 a로 저장
git add f2.txt
후 이 상태에서 f2.txt의 내용을 stash하기 위해 git stash
git status
로 확인해보면 수정된 사항이 없다고 뜸
git stash list
로 확인해보면 2개의 stash가 저장 된 것을 확인 가능
- 가장 최근에 처리한 stash는 가장 위에 존재하게 됨
git stash apply
라는 명령어를 치면 가장 위에 있는 stash를 적용하게 됨
git stash apply
를 친 후(f2.txt가 생성됨) git stash list
를 확인해보면 아직도 f2.txt에 대한 내용이 존재하는것을 확인 가능
git stash drop
을 통해 가장 최근의 stash를 삭제하면 됨
git stash list
를 보면 하나만 남아있는것을 확인 가능
git stash apply; git stash drop;
을 치면 적용 후 바로 삭제 가능
git status
로 확인 해 보면 f1.txt와 f2.txt가 모두 살아났으며 git stash list
를 하면 아무것도 남아있지 않은것을 확인 할 수 있음
git reset --hard
로 초기화
vim f1.txt
에 내용 b를 추가 후 git add f1.txt
, git stash
를 하면 해당 내용이 감춰지고 변경사항이 없는 상태가 됨
git stash apply; git stash drop
과 동일한 작업을 하는 git stash pop
명령허를 수행
- stash가 자동으로 apply가 되고 drop이 된 것을 확인 할 수 있음
git reset --hard
로 초기화 후 vim f1.txt
에 내용 b를 추가, vim f2.txt
에 내용 a를 추가
git status
로 확인 해 보면 f1.txt는 tracked 상태이므로 modified 상태, f2.txt는 untracked 상태인것을 확인 가능
git stash
를 치면 f2.txt는 tracked 상태가 아니기때문에 stash 되지 않은 것을 알 수 있음
- 즉, stash는 tracked 상태인 파일에만 적용 가능한 것을 알 수 있음