#20 Git - stash

김현준·2022년 12월 23일
0

GIT

목록 보기
20/41

이번 시간에는 stash 에 대해 알아보겠습니다.

stash 는 감추다 , 숨겨두다 라는 뜻을 가지고 있습니다.
이는 branch 를 활발하게 작업하던 도중에 현재 branch 에서 작업을 마무리 하지 않았는데 , checkout 을 해서 다른일을 해야하는 경우가 있습니다.

이때 commit 을 하지않으면 checkout 을 할 수 없기 때문에
stash 를 통해 해결 가능합니다.

master 에서 f11.txt 파일을 새로 만들어 보겠습니다.

addcommit 도 해줍니다.


git checkout -b exp 를 통해 checkoutgit branch exp 를 동시에 해줍니다.
이후 f11.txt 파일을 수정해줍니다.

이때 만약 일이 생겨서 checkout 을 해야한다는 상황이 온다면 어떻게 해야할까요?

이때 만약 바로 git checkout master 를 실행시 git status 를 실행하면 아까 수정한 f11.txt 의 내용이 master 에도 영향을 끼칩니다.

master 에서도 exp 에서 바꾼 파일의 내용이 적용이 된다는 것입니다.

하지만 우리는 exp 에서 작업을 하던 도중에 급한 일이 생겨 master 로 이동할려는 것이지 , master 에까지 exp 에서 수정한 내용을 옮기는 것은 원하지 않았습니다.

이후 git checkout exp 를 통해 이동한 후에 git stash --help 를 통해 옵션을 확인 해줍니다.

git stash 를 사용해줍니다. save 옵션을 쓰셔도 무방합니다.

이후 git status 실행시 commit 할 파일이 없다고 뜹니다.
cat f11.txt 실행시 아까 수정했던 내용은 없고 기존의 내용만 그대로 남아있는 모습입니다.

또한 master 에서도 아무론 영향을 끼지치 않았습니다.

이후 git checkout exp 로 이동해준 후에 git stash apply 를 통해서 복원해줍니다. 이때 f11.txt 의 파일내용을 보면 이전에 변경했던 내용으로 출력되는 것을 확인 할 수 있습니다.

또는 git reset --hard HEAD 를 통해 가장 최근에 commit 한 내용을 삭제해주면 git status 실행시 commit 할 파일이 없다고 출력됩니다.

하지만 이 또한 git stash apply 를 통해 복원 가능합니다.

stash 는 명시적으로 삭제를 하지 않는 이상은 이전에 저장한 내용이 계속 남아있다는 뜻입니다.

이후 한번더 git reset --hrad 를 실행하고

f12.txt 라는 새로운 파일을 만듭니다. 파일내용에는 a 만 넣었습니다.

이때 f12.txt 파일을 add 만 하고 stash 를 하겠습니다.

이때 git stash list 를 실행하면 가장 위에있는 stash 를 적용합니다. 만약에 가장 최근의 stash 말고 그 이전의 stash 를 적용할려면 어떻게 해야할까요?

git stash drop 를 통해 가장 최근의 stash 를 삭제할 수 있습니다.

또한 git stash apply ; git stash drop; 를 통해 명령을 동시에 수행할 수 있습니다. 이는 이전의 stash 를 적용시키고 , 가장 최근의 stash 를 삭제해라는 의미입니다.

또는 git stash pop 을 실행해도 됩니다.

git stash --help 를 통해 내용을 보면 git-stash - Stash the changes in a dirty working directory away 라고 적혀있습니다.
이때 유심히 봐야 할 점은 working directory 에 있는 파일만 적용한다는 접입니다.

f13.txt 를 새로만들고 add 하지 않은 상태에서 git status 실행시 f13.txtUntracked files 라고 뜹니다. 즉 추적되고있지 않은 파일입니다.

따라서 git stash 를 실행해도 f13.txt 는 적용되지 않습니다.

따라서 stash는 최소한 버전관리가 되고있는 파일에 한해서만 적용이 됩니다.

profile
울산대학교 IT융합학부 22학번

0개의 댓글