[Git] Stash

Stash

stash 는 로컬에서 수정한 내역을 임시로 저장할 수 있게 해주는 명령어다.

Table of Contents

About

보통 로컬 리포지토리에서 변경을 가한 내역을 바로 commit 하고 싶지 않은 경우 사용한다.
stash 라는 명칭이 지닌 “넣어두다, 치워두다”의 의미 처럼 해당 명령어를 사용한다면, 진행중이던 작업내역을 일시적으로 다른 곳에 치워놓고 나중에 꺼내서 작업할수 있다.

stash 로 저장된 내역들은 특정 Branch 에 종속적이지 않으므로 어느 Branch 에서든 꺼내(pop or apply) 사용할 수 있다.

stash-pop

LIFO

Stash 에는 LIFO stack 이 사용된다.
LIFO stack 에 존재하는 stash 기록들은 ID 가 존재한다.

apply w/o ID
git stash apply
stash 적용시 ID 를 명시하지 않는다면, 제일 마지막으로 stack에 쌓인 기록이 제일 먼저 pop 된다.

apply w/ ID
git stash apply <stashID>
특정 stash 내역을 적용하고자 한다면 ID 를 이용해서 가능하다.

↑ return to TOC

Apply & Pop

임시방편으로 stash 명령어로 저장한 내역들을 꺼내 사용하고자 할때는 apply 또는 pop 을 사용한다.

↑ return to TOC

When to use git stash

  1. feature_A 라는 브랜치에서 작업을 하던 도중 feature_B 의 기능을 먼저 추가해야하는 상황 일 때.

    • 작업자는 feature_A 에서 feature_B 브랜치로 전환해야 한다.
    • 하지만 변경된 내역을 git 이 알도록 기록(저장) 하지 않는다면 아래와 같은 에러 메시지를 만나게 된다.
      error: Your local changes to the following files would be overwritten by checkout:
      
      fileName.ext
      fileName2.ext
      
      Please commit your changes or stash them before you switch branches.
      Aborting
      
    • 작업한 내역들을 휘발시키지 않기위해 기록해 두는 방법은 두 가지가 존재한다. 바로 commitstash 이다.
      • commit : 작업한 내역을 영구적인 기록으로 남겨놓고자 할 때.
      • stash : 작업하던 내용들을 임시적인 기록으로 남겨놓고자 할 때.
        작업물들이 아직 commit 하기에는 부적합(여러가지 사유로)하다고 느껴지는 경우 stash 를 이용하게 된다.
  2. feature_D 에서 필요한 작업들을 feature_C 에서 잘못 작업해버린 상황일 때

    • git stash
      변경된 내역들을 현재 작업중인 feature_C 브랜치에 commit 하는 대신 stash 처리한다.
    • git checkout feature_D
      feature_C 에서 feature_D 브랜치로 전환.
    • git stash pop
      가장 최근에 저장한 stash 내역을 feature_D 로 가져와 적용시키기.

↑ return to TOC

Commands

Stash

Apply

Clear

Drop

List

Pop

Show

↑ return to TOC