티스토리 뷰

Tools/Git

[Git] 스태시(stash)

SdardewValley 2022. 5. 29. 21:02
반응형

스태시

스태시 작업

  스태시는 완료되지 않은 작업들을 임시로 저장할 수 있게 도와주는 기능이다. 스태시를 통해서 워킹 디렉토리의 작업을 스택 영역에 임시로 보관할 수 있다. 스태시를 사용하면 마지막 커밋 이후로 작업한 내용은 임시 저장되고 마지막 커밋 상태로 돌아간다.

  변경사항이 남아 있을 때 git checkout으로 브랜치를 변경할 수 없다. 변경 작업을 도중 완료되지 않은 상태에서 브랜치를 변경해야 할 때 스태시 기능을 사용하면 된다.

 

 

실습

stash - 변경 내용 저장

변경 내용을 저장하지 않고 checkout을 할 때

  새로운 브랜치에서 stash.txt라는 파일을 변경한 뒤 변경내용을 저장하지 않고 main 브랜치로 변경할 때 main 브랜치로 변경되지 않고 error가 출력된다. "Please commit your changes or stash them before you switch branches."라고 commit을 하거나 stash를 하라는 안내문이 출력된다. 브랜치 변경으로 다른 브랜치에 영향을 줄 수 있기 때문에 이런 브랜치 이동이 제한된다. 

 

git stash 실행

  git stash를 실행했을 때 워킹 디렉토리의 작업 내용이 스택에 저장된다. git status로 상태를 확인했을 때 working tree clean 상태이다.

 

main 브랜치로 전환

  main 브랜치로 변경을 했을 때 error 메시지 출력 없이 브랜치 변경이 성공했다.

 

💡 untracked file도 stash하는 방법

--include-untracked 옵션(-u로도 가능)을 주어 untracked 파일도 stash 작업을 할 수 있다. 

 

list / show - stash 목록 확인

stash 출력

  stash 객체들은 .git/refs/stash 저장된다.

 

git stash list

  git stash list 명령어를 통해서 스태시 목록을 확인할 수 있다.

 

git stash show
git stash show -p

  git stash show를 통해서 변경 내역을 알 수 있다. p 옵션을 준다면 더 상세한 변경 내역을 알 수 있다.

 

pop - 작업 내용 불러온 후 삭제

git stash pop

  stash는 스택에 변경 내용을 저장한다고 했다. 스택에서 저장된 데이터를 가져올 때 pop을 사용한다. stash도 마찬가지이다. git stash pop 명령어를 통해서 임시로 저장했던 변경 내용을 가져올 수 있다.

  stash는 스택에서 가져온 변경 내용을 현재 있는 브랜치와 자동으로 병합한다. 자동으로 병합된다면 스택에 저장되었던 변경 내용은 제거된다.

 

git stash list

  git stash pop으로 임시로 저장했던 이전 작업들을 가져오면 git stash list를 실행하면 아무것도 출력되지 않는 것을 확인할 수 있다.

 

branch - 브랜치에 stash 적용

git stash branch branchName

  저장했던 내용을 불러왔을 때 충돌이 발생하면 스택의 작업 내역이 자동으로 삭제되지 않는다. 충돌이 발생했을 때 충돌을 해결한 뒤 수동으로 작업 내역을 삭제해야 한다. 만약 충돌이 발생할 가능성이 있는 경우 stash 작업을 위한 브랜치를 하나 생성하는 방법도 있다.

  git stash branch 브랜치명으로 stash 작업을 위한 브랜치를 생성할 수 있다. 

 

  new branch 'test'가 생성됨과 동시에 Dropped ~ 로 stash 작업 내용을 불러온 것을 알 수 있다.

 

apply - 작업 내역 불러오기 (삭제 X)

  stash로 저장한 작업 내역은 동일한 브랜치가 아닌 다른 브랜치에서도 복원이 가능하다. 즉 branch1에서 stash로 작업을 저장했을 때 branch2에서 stash로 저장한 작업 내역을 불러올 수 있다.

  stash 복원을 pop으로도 할 수 있지만 apply로도 작업을 복원할 수 있다. pop은 복원 후 작업 내역을 자동으로 삭제하지만, apply는 자동으로 삭제하지 않는다는 차이점이 있다. 따라서 apply 명령어를 통해서 stash의 작업 내역을 여러번 불러올 수 있다.

 

git stash apply

  git stash apply 실행 뒤 git stash list를 실행하면 저장했던 작업 내역이 그대로 남아 있는 것을 확인할 수 있다.

 

git stash list

  stash에는 여러 개의 작업을 저장할 수 있다. pop은 마지막 작업 내용을 불러오지만 apply 명령어는 뒤에 stash 이름을 추가하여 작업을 지정할 수 있다. 따라서 마지막 작업이 아닌 작업을 불러올 수 있다.

  stash@{번호}라고 되어 있는 것을 git stash apply 뒤에 입력하면 해당 작업을 복원한다.

 

drop - stash 삭제

  apply 명령어를 사용하면 스택에서 자동으로 작업내역 이 삭제되지 않는다. 작업 내역을 삭제하고 싶을 때는 drop 명령어를 추가하면 목록에서 학제된다.

 

git stash drop

  Dropped ~ 가 출력됨과 동시에 저장한 작업 내역이 삭제된 것을 확인할 수 있다.

 

참고 자료

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함