Hello

git stash

by 볼빵빵오춘기

작업이 끝나지 않은 branch를 나가고 다른 branch에 가서 작업을 해야할 때가 있다. 

이 때, 작업했던 내용을 숨겨놓고 그 branch의 최신 commit HEAD의 버전으로 이동해서 현재의 branch를 깔끔하게 하고 다른 branch로 checkout을 할 수 있다. 

stash는 branch를 활발하게 사용하지 않으면 쓸 일 이 없다. 

 

  • 다시 작업을 하기위해 작업공간을 다시 만든다. 
  • git init
  • vim f1.txt(내용에 a만 넣음)
  • git add f1.txt
  • git commit -m 1
  • git checkout -b exp (exp 이름을 갖는 branch를 만들고 chekcout까지 시킨다.)
  • vim f1.txt(내용을 a에서 ab로 변경함.)
  • 현재 branch는 exp 이고, f1.txt를 commit과정을 하지않은 상태에서 main으로 변경한다. 

 

여기까지 branch는 main으로 변경된 상태이고, main branch가 f1.txt를 수정하지 않았지만 status를 확인해보면 f1.txt가 보인다. 


branch를 exp로 변경한 후 status를 확인해보면 f1.txt가 보인다. 


그러면 여기서 문제인 부분은 f1.txt가 작업이 끝나지 않았지만 다른 branch로 변경해야되는 지금 이 상황에 사용하는게 stash이다.

stash함으로써 f1.txt에 변경된 내용이 아닌 처음 작업했던 내용인 a만 보인다.

git stash
git stash save // save는 생략도 가능하다.


그러면 숨겨놓은 것을 다시 확인할려면 어떻게 해야할까?

git stash apply


stash를 안보이게할려면 다시 과거로 돌아간다. 

status로 확인해보면 commit 할 것이 없다고 나온다.

git reset --hard HEAD // 가장 최신 commit 상태로 돌아간다.


그러면 과거로 돌아갔으므로 stash한 것은 없어진걸까?

stash list 명령어를 입력하여 보면 stash가 있는 것이보인다. 

stash는 명시적으로 삭제하지않는 이상은 계속 어딘가에 남아있는 것이다. 

git stash list

git stash apply


새로운 f2.txt를 만들고 추가 stash를 해본 후 stash list를 보자.

list가 두 개가 뜬다. 

stash@{0}, stash@{1} 중 stash@{0}은 마지막으로 처리한 stash이고, stash@{1}은 처음에 stash 처리한 것이다.  

만약 stash apply를 적용하면 맨위에 stash를 적용하게 된다.


그러면 stash@{1}을 적용하고 싶다면

git stash appply를 하여 마지막 stash를 적용한다. 

적용후 확인해보면 적용은 됐지만 stash@{0}은 삭제되지는 않았다.


stash를 삭제한 뒤 다시 적용시킨다.

git stash drop

 

참고로 stash는 버전관리가 되있는 파일만 한다.(=> add를 안 한 파일에 대해서는 안된다.)

'👩🏻‍💻 About 프로그래밍 > git' 카테고리의 다른 글

merge & conflict  (0) 2024.08.28
working copy & index & repository  (0) 2024.08.28
branch 병합  (0) 2024.08.28
branch 정보확인  (1) 2024.08.28
branch 만들기  (2) 2024.08.28

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기