본문 바로가기
etc.

[git] git stash - 커밋하지 않고 변경사항 저장하기 (매우 유용)

by RIMD 2023. 5. 22.

이클립스에서 git checkout하여 branch를 바꿔주려고 했는데 Confilcts(충돌)이 났습니다.

 commit은 안되고 stash는 뭘까 고민중이며...

이 코드가 어느 기준으로 commit되는지 판단이 되지 않기도 하며,

git stash를 명령어에 대해 알고서 대응하고자 작성한 글입니다.

 

이클립스 대신 vscode를 통해 git 명령어를 테스트했습니다.


 

git stash는 변경사항을 임시로 저장할 수 있도록 도와주는 기능.

예를 들어,

git 저장소에서 코드 작업을 하고 있는 상황을 가정해보겠습니다.

코드를 열심히 수정하던 중인데 아직 커밋은 하지 않았습니다. 갑작스럽게 핫픽스(긴급수정) 요청이 들어옵니다.

이럴 때 떠오르는 방안은 ?

1. 변경사항 전체를 하드 리셋 -> 기존 수정 코드는 BYE~

2. 저장소를 하나 더 클론 받아오기 -> 안정적이지만 큰 프로젝트나 너무 작은 부분만 수정해야 할 때는..?

3. 작업 내용을 보존하기 위해서 급하게 코드 전체를 커밋 -> 코드가 꼬일 확률이 높아질 우려가..?

 

git stash  명령어 설명

git stash 변경사항을 임시로 저장하는 명령어
git stash pop 저장한 임시 변경 사항을 꺼내오는 명령어
git stash -m "메세지" 변경사항을 임시로 저장할 때 메시지도 함께 저장하는 명령어

stash는 기본적으로 스택처럼 동작합니다.

git stash로 변경사항을 쌓아놓고, pop으로 가장 최근에 저장한 변경사항을 꺼내고 그 내용은 삭제해버립니다.

 

git stash 테스트

대충 개념을 알아봤으니, 테스트하여 실제 동작 원리를 확인 해보도록 하겠습니다.

세 개의 파일이 있습니다. 세 개의 파일은 모두 수정 상태이며,

그 중 add1.txt파일만 git add처리 되어 있는 상황이라고 가정 해봅니다.

아래 gitstatus를 통해 위와 같은 상황을 만들어줍니다.

이 상태에서 

git stash

git stash 명령어 쓰고 엔터하면, 마지막으로 로컬에 pull 되어 있던 상태로 바꿔줍니다.(아래 이미지 빨간 박스 참고)

그렇기 때문에 working tree도 깔끔해진 것을 git status를 통해 확인 할 수 있습니다.

그리고 vscode를 사용한다면 git graph를 확인하면 stash 처리 된 부분을 확인 할 수 있습니다.

 

그리고 git stash pop 할 경우, 스테이지 상태까지 유지되지 않음을 알 수 있다.


추가적으로 git stash에 메세지를 남기고 싶을 땐 commit 메세지 남기는 것과 동일하게 git stash 명령 뒤에  -m을 붙여서 메세지를 작성하면 됩니다.

git stash -m "남길 문구 작성"

 

 

vscode graph를 확인했을 때, 메세지가 같이 저장 됨을 확인 할 수 있습니다.


또한 git stash는 스택처럼 쌓이기 때문에 git stash list를 통해 git stash 임시 저장한 리스트를 확인 할 수 있습니다.

 

git stash는 스택처럼 동작하기 때문에 

*스택 -> 리스트의 한쪽 끝에서 자료의 삽입과 삭제가 이루어지는 자료 구조

가장 최근에 들어온 자료가 가장 먼저나가게 되는 LIFO 형태

git stash drop시 마지막으로 추가 했던 항목이 삭제된 것을 확인 할 수 있습니다.

 

더 많은 시나리오를 구성하여 stash를 사용하여, 잘 활용하면 hotfix 요청 시 대응하기에 수월 할 것으로 여겨집니다.

 

댓글