GIT

[GIT] git stash란? 커밋 없이 pull하기

B_Tae 2022. 11. 16. 22:16

stash (스테이시)

사용하는 이유

[ 1 ] 커밋 없이 pull, checkout 등을 사용하기 위해

  • 코드를 작성하다보면 작업 중 pull, checkout 등을 할 필요가 있다.
  • 하지만, 커밋을 하지 않을 경우 위 명령을 수행할 수 없을 뿐더러 단순히 브랜치를 옮기기 위해 커밋을 하는 건 바람직하지 않다. ( 커밋 메세지는 히스토리를 남길 수 있는 중요한 요소 )
  • 위 상황에서 스테이시를 통해 변경사항을 저장하고 다른 작업후 돌아와 이어 코드를 작성할 수 있다.

[ 2 ] 잘못된 브랜치에서 작업했을 경우

  • 예를 들어 develop 브랜치에서 작업을 했어야 했지만, 실수로 main에서 작업하고 있던 경우가 있다.
  • 이때 스테이시를 통해 잘못된 브랜치에서 작업한 내용을 저장하고 develop브랜치로 이동하여 저장된 내용을 반영할 수 있다.

[ 3 ] 여러 브랜치에 적용을 해야 할 경우

  • 브랜치에 이전 히스토리 때문에 merge나 pull이 꺼려지는 상황이 있다.
  • 이때 스테이시를 통해 변경한 부분을 저장하고 여러 브랜치에 checkout을 하며 각각 반영할 수 있다.

자주 사용하는 Stash 명령어 및 사용법

  • git stash
    • 변경사항이 있다면 checkout을 할 수 없다.

- git stash를 통해 변경 사항을 저장하고 checkout을 통해 브랜치를 변경할 수 있다.

 

 

  • git stash list
    • 스테이시 한 리스트를 볼 수 있다.

  • git stash pop || git stash pop stash@{0}
    • 스테이시를 이용해 저장한 내용을 다시 꺼낸 후 list에 삭제된다.
      • 저장했었던 내용 중 가장 최근 내용을 현재 브랜치에 적용한다.
      • stash list를 보면 스테이시 목록에서 사라진다.

  • list가 다수일 경우 stash ID값을 통해 선택 할 수 있다.
    • git stash list 명령어를 통해 각 스테이시에 ID값을 알 수 있다.

  • git stash apply || git stash apply stash@{0}
    • git stash pop과 유사하지만 list에서 삭제되지 않는 특징이 있다.
      • 위 사진을 보면 git stash pop과 동일하게 저장된 부분을 적용했지만, list에는 여전히 남아 있다.
      • 이 명령어를 통해 여러 브랜치에 동일한 코드를 적용시킬 수 있다.

  • 마찬가지로 list가 다수일 경우 stash ID를 통해 선택 할 수 있다.
    • git stash list 명령어를 통해 각 스테이시에 ID값을 알 수 있다.

  • git stash drop || git stash drop stash@{0}
    • list에 있는 항목을 지울 수 있다.
      • 커밋 이름이 동일하기 때문에 구분은 힘들지만 option이 없다면 가장 최근 내역을 지운다.
      • 마찬가지로 ID를 통해 특정 stash를 지우는 것이 가능하다.