🎉 berenickt 블로그에 온 걸 환영합니다. 🎉
DevOps
10-코드 보관-stash

1. git stash : 코드 잠깐 보관하기

이상한 코드가 있다고 칩시다. 그 코드를 잠깐 치워놓고 개발하고 싶으면 주석처리해도 되겠지만 git stash 명령어를 이용해도 잠깐 코드를 치울 수 있습니다.

1
# 새 프로젝트 폴더 app 생성
2
git init
3
4
# a 라는 파일 생성 후 수정
5
# ------------------------------a.txt
6
aaaaaaaaaaaaa
7
# -----------------------------------
8
9
git add .
10
git commit -m '어쩌구'
11
12
# a의 파일의 수정
13
# ------------------------------a.txt
14
aaaaaaaaaaaaa
15
bbbbbbbb # 잠깐 잘래내서 보관하고 싶음
16
# -----------------------------------
17
18
git stash # 임시 공간으로 이동
19
git stash list # 보관된 코드 목록 조회
20
stash@{0}: WIP on main: 8978be9 어쩌구
21
22
# 최근 commit과의 차이점을 전부 보관해주는 git stash
23
# 다만, staging 안해놓은 새 파일은 stash가 안될 수도 있음
24
25
# ------------------------------a.txt
26
aaaaaaaaaaaaa
27
ccccccc
28
# -----------------------------------
29
30
# 📝 git stash save '메모'
31
git stash save 'ccc라고 적음' # 메모도 함께 입력 가능

터미널에 git stash 입력하면 방금 작성한 bbbb 어쩌구 코드는 잠깐 다른 공간에 보관됩니다. (그래서 파일들이 최근 commit 상태로 되돌아갑니다.)

  • staging 된 것이든 안된 것이든 추적중인 파일은 다 이동됩니다.
  • 새로 만든 파일인데 staging 안되었다면 이동안됩니다.
  • git stash save '메모'로 메모도 함께 입력 가능합니다.
  • git stash list는 현재 stash 되어있는 코드 목록을 전부 출력해주는 명령어입니다.

2. 보관했던 코드 다시 불러오기

git stash 했던 코드가 여러개 있으면 가장 최근에 보관했던 코드부터 먼저 불러옵니다.

1
git stash pop # 가장 최근 stash 불러오기

가장 최근에 들어온 것 부터 먼저나갑니다. 물론 현재 코드와 겹치는 부분이 있으면 conflict나니까 알아서 해결하면 됩니다.


3. stash 관련 여러 명령어들

삭제할 id는 git stash list 하면 보이는 0, 1, 2 이런 숫자 넣으면 됩니다.

1
git stash list
2
stash@{0}: WIP on main: 8978be9 어쩌구
3
4
# 특정 stash 삭제
5
# 📝 git stash drop 삭제할id
6
git stash drop 0
7
8
git stash clear # 모든 stash 삭제

전체 말고 일부 코드만 git stash 하고싶으면 다음 명령어 씁시다. 그럼 파일을 훑어주면서 stash할 지 의견을 물어보는데 y/n 으로 잘 대답하면 됩니다.

1
git stash -p

4. 왜쓰나

Q. 주석처리해놓는게 더 쉬울듯

실은 코드를 주석처리하는거랑 용도가 비슷한데 주석처리된 코드는 commit할 때 반영됩니다. 그렇게 되면 주석도 commit 기록에 남아서 기록이 더러워질 수 있습니다. 주석처리한 내용을 commit 해버리기 싫을 때 git stash 쓰면 유용합니다.

또는 기능 A, B를 만드는데 기능A는 완성되었고, 기능B는 완성이 안됐을 때, 팀장이 “기능A 부분만 빨리 commit하고 merge 하라”고 하면 그럴 때 기능B를 git stash 해놔도 좋을듯요.


Q. 브랜치 새로 만들어서 거기다 코드짜놓는거랑 다를바 없는데요?

들킴. 간단히 브랜치만들어서 거기 보관하는 것도 나쁘지않습니다.