본문 바로가기

Git

[Git] 작업 중인 파일을 임시로 숨겨 두는 방법 (stash)

728x90
반응형


작업 중인 파일을 임시로 숨겨 두는 방법 (stash)


현재 작업 중에 있는 브랜치에서 작업을 완료하지 않고 다른 브랜치로 이동하고 싶을 경우! 커밋을 하기 애매할 때! stash를 사용합니다.

stash를 사용하면 작업 중의 파일을 임시 저장 해서 숨겨두고, 이전의 마지막 커밋 상태로 초기화 합니다.

이 후 다른 브랜치로 작업 하다가 다시 돌아와서 저장해두었던 작업 내용을 복원할 수 있습니다.



예시로 설명해 보겠습니다.


- master에서 f1.txt를 만들고 커밋

- exp 브랜치를 만들고 이동 후에 f1.txt를 수정. add, commit은 안한 상태

위 작업을 하고 마스터 브랜치로 이동하고 상태를 확인하면 f1.txt가 변경되었는데 제대로 반영되지 않았다고 알려줍니다.



$ git stash

or

$ git stash save

다시 exp 브랜치로 돌아와서 git stash(git stash save)를 입력하게 되면 f1.txt를 임시 저장해서 내용이 숨겨지게 됩니다.

그리고 master로 이동해서 상태를 확인하면 아무것도 커밋할 것이 없다고 나옵니다. 즉 f1.txt는 좀 전에 수정했던 작업을 가지고 있지 않게 됩니다.



이제 exp 브랜치에서 저장했던 내용을 불러와봅시다.

$ git stash apply

apply를 하면 저장되었던 f1.txt의 수정 내용을 불러오게 되서 f1.txt를 확인하면 수정된 상태로 돌아와있는 것이 확인됩니다.



이번에는 f1.txt의 내용을 날려보고 stash의 list를 확인해보겠습니다.

$ git reset --hard HEAD

(HEAD를 같이 적으면 가장 최신 상태의 커밋으로 돌려놓음)


reset하면 수정하고 있던 값이 다 날라간다.

하지만 stash의 list를 확인하면 값이 남아있다.

$ git stash list

이처럼 값이 지워졌어도 stash의 list에 저장되어 있어서 stash apply를 하면 다시 살아난다.

reset, apply를 사용해서 지우고 되살리는 작업을 왔다 갔다 할 수 있다.



수정 후 stash를 또 하게되면 stash list에 두개가 쌓여있게 된다.

가장 최근 stash가 0이고 이전 stash가 1이다.

stash apply하면 0을 apply한다. 하지만 0이 삭제되지 않는다.


사용하면서 삭제하고 싶을 경우

$ git stash apply; git stash drop;

=

$ git stash pop

apply는 불러오기는 것, drop은 가장 최신 것을 삭제하는 것,

pop은 두 가지를 한번에 하는 것이다.


  • git stash는 버전관리가 되는 파일에 한해서만 stash 할 수 있다.

즉 한번도 커밋을 하지 않은 파일을 stash하려고 할 경우 stash할 수 없다. 반드시 한 번은 버전관리 시켜놓아야 한다.




참고 : 생활코딩 - 지옥에서 온 Git

728x90
반응형

'Git' 카테고리의 다른 글

[Git] fork와 clone  (0) 2019.01.28
[Git] git과 github의 차이  (2) 2019.01.28
[Git] branch 병합 시 충돌해결  (0) 2019.01.28
[Git] branch 병합하기 (merge), fast forward와 merge commit의 차이점  (2) 2019.01.28
[Git] branch 정보 확인  (0) 2019.01.25