열심히 A라는 브랜치에서 작업 중이었는데,
오류가 발생하는 등에 이유로 다른 브랜치로 이동해야 하는 경우가 있다.🤭
특히 회사에서 일하면서는 이런 일을 빈번하게 겪었다.
코드리뷰에 대한 답변이 와서 수정이 필요할때, 긴급한 오류를 처리할 때 등등
그럴때마다 아직 미완서인 코드들을 불필요한 커밋을 올리고, checkout 했었다..
그런 내 이야기를 듣고, 동료분이 stash를 쓰면 되지 않냐고 해서 찾아보고
이걸 왜 이제 알았을까 생각이 들었다..!

커밋하지 않고, 변경사항 저장하기! git stash
간단 정리
- git stash : 변경 사항 저장
- git stash list : stash한 내역 확인
- git stash apply [stash id] : stash한 내역 불러오기(id 미지정시 가장 최근에 stash한 내역)
- git stash drop : stash한 내역 지우기 (id 미지정시 가장 최근에 stash한 내역)
- git stash pop : apply와 drop을 동시에, stash한 내역을 빼오고 삭제 (id 미지정시 가장 최근에 stash한 내역)
- tracked 또는 staged된 파일만 가능!
설명을 위해 아주 간단한 프로젝트 파일을 생성했다.
우선 master에는 다음과 같이 index.js와 package.json이 존재한다.
작업을 위해 브랜치를 생성하고 이동하였고(예를 들기 위해서 test라고 이름 지었다.)
해당 브랜치에서 다음과 같이 함수명도 바꾸고, 새로운 함수도 만드는 작업을 진행하였다.
그래서 git status를 하면 아래와 같이 index.js가 modified 됐다고 나온다.
이 경우에 git stash를 입력하면, 작업한 내용을 저장할 수 있다.
git stash list를 통해서 stash한 내역을 볼 수 있다.
git status를 해보면 stash를 통해서 변경 사항이 저장되고 다시 이전 상태로 돌아갔기 때문에,
working tree가 clean하다고 한다.
git stash apply를 통해서 stash로 보관한 내용을 불러올 수 있다.
이때 stash 한 내용이 여러개이고 별도로 id 지정을 안해고
명령어를 입력한다면, 가장 최근의 stash한 내역이 불러와진다.
git stash apply 명령어는 stash한 내역은 불러오고, 삭제는 하지 않는다.
그래서 하단의 사진처럼 git stash list시에 여전히 stash한 내역은 남아있게 된다.
git stash drop을 이용해, stash한 내역을 삭제 할 수 있다.
마찬가지로 별도로 id 지정을 안해고 명령어를 입력한다면, 가장 최근의 stash한 내역이 삭제된다.
git stash drop을 한 뒤에 git stash list를 해보면 한 개의 stash만 진행했기에
stash 한 내역이 존재하지 않는 것을 볼 수 있다.
매번 git stash apply와 git stash drop을 하기 귀찮다면?
git stash pop을 사용하면 된다.
pop을 사용하면 apply와 동시에 drop이 되기 때문에, stash 한 내역을 불러오고 삭제할 수 있다.
이렇게 git stash를 이용하면 편하게 작업 내용을 보존할 수 있다!
주의할점!!
git stash를 할 때는 tracked 또는 staged된 파일만 가능하다.
한번이라도 커밋이 된적 있던 파일 또는 새로 생성됐었다면, git add를 통해서 staged된 상태여야 한다.
실제로 tracked file인 index.js와 새롭게 생성된 test.js가 있다.
이 상태에서 git stash를 한다면?
바로 아래와 같이 tracked의 file만 stash되고, 새롭게 생성한 file인 test.js는 여전히 변경사항이 남아있는 것을 볼 수 있다.
untracked된 파일인 경우에는 git add 명령어를 통해서 staged된 상태로 만들고 git stash 하면 된다.
그럼 아래와 같이 새롭게 생긴 파일도 stash로 들어간 것을 확인할 수 있다!
'Programming > ETC' 카테고리의 다른 글
Mongoose error - cyclic dependency detected (0) | 2022.04.25 |
---|