[깃(Git)] 5. 변경 사항 임시 저장을 위한 스태시(stash)

git stash

  • git stash는 수정 내용을 임시 저장하는 명령어이다.
  • main 브랜치로부터 feature-a를 만들어 이 브랜치로 전환해서 작업하고 있었다고 가정했을 때, 작업 도중 잠깐 다시 main 브랜치로 전환해야 할 일이 생겼다.
  • 이 때 변경사항을 커밋으로 남기기에는 아직 진행중이라 애매한 상황이라면, 임시 저장을 하는 git stash를 활용하면 된다.
  • git stash 명령을 쓰면 현재 변경사항을 별도의 스택 공간에 빼두게 된다.
1
2
3
4
$ git stash
'''
Saved working directory and index state WIP on main: 6d4bb1f a 파일 수정
'''
  • 만약 메시지를 남기고 싶다면 -m을 활용하면 된다.
1
$ git stash -m "메세지"
  • 이제 main 브랜치로 전환할 수 있다.
1
2
3
$ git switch main

'main' 브랜치로 전환합니다

git stash list

  • 이렇게 stash 한 내역은 다음처럼 git stash list로 확인할 수 있다.
1
2
3
4
$ git stash list
'''
stash@{0}: WIP on feature-a: 6d4bb1f a 파일 수정
'''

git stash pop

  • main 브랜치에서 해야 할 일을 다 마치고 이제 다시 feature-a로 돌아가 작업을 진행하고 싶다.
  • 이때는 브랜치 이동 후 git stash pop 명령어로 아까 스택에 넣었던 작업 내역을 다시 불러오면 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ git switch feature-a
'''
Switched to branch "feature-a"
'''

$ git stash pop
'''
On branch feature-a
Your branch is ahead of "origin/main" by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   b

Dropped refs/stash@{0} (8bfabd0667f73191b94a1b2b6e07801e1a2bd0a6)
'''

git stash apply

  • git stash pop과 비슷한 명령어로 git stash apply가 있다.
  • 이 둘의 차이점은 스태시한 내역을 저장하는 스택 공간에서 내역을 제거하는 지 여부이다.
  • git stash pop의 경우 스택에서 작업 내역을 제거한다. 따라서 git stash list로 해당 작업이 빠져있는 것을 확인할 수 있다.
  • 반면 git stash apply의 경우 스택에서 작업 내역을 빼지 않는다.
  • 따라서 git stash list 로 봐도 작업 내역이 그대로 남아있는 것을 볼 수 있다.
  • 여전히 스택에 남아있기 때문에 다른 곳에서 넣어둔 작업내역을 재사용할 수 있다.(여러 곳에서 apply 가능하다는 의미이다.)
0%