[Git] git stash - 개발 중, 브랜치를 변경해서 작업하는 방법

 

 

github

 

 

개발 중, 브랜치를 변경해서 작업하는 방법 

 

 

나는 보통 인텔리제이로 스프링부트 개발을 하는 개발자이다.

 

개발을 하다보면, "어라? 이거 이쪽 브랜치에서 작업할 게 아닌데..."

라고 생각이 드는 순간이 있다.

 

오늘 포스팅할 내용을 모른다면

아주 위험한 순간이다.

 

이때 아무것도 모른 채로 브랜치를 변경하게 되면 커밋하지 않은 모든 작업내용이 증발할 수 있다.

 

한번 실제 상황을 곁들인 직관적인 예시로 자세히 알아보자

 

 


 

🚨 작업 중, 브랜치 변경 상황 발생

 

브랜치 변경 상황

 

당신은 Error를 관리하는 Enum 클래스에 무수히 많은 내용을 입력했고,
만든 것을 사용할 클래스 하나를 만들었다고 가정하자

 

그런데 다시보니 해당 브랜치는 Error 설정과 관련된 브랜치가 아니다!

 

 

브랜치 변경

 

아무것도 모르는 당신은 에러를 포함한 여러 메세지를 관리하는 브랜치로 변경을 시도할 것이다.

 

checkout problem

 

"어라 이게 뭐지?"

 

Local에서 소스를 수정한 상태로 커밋하지 않고
다른 브랜치를 Checkout 하려고 한다면, 충돌로 인해 위와 같은 오류가 발생하는 것이다.

 

 

🔥 Force Checkout


로컬에서 추가하거나 수정된 내용을 날려버리고 브랜치 변경

 

 

🎓 Smart Checkout


IntelliJ IDEA가 커밋되지 않은 변경 사항 을 보류 하고 선택한 분기를 체크 아웃 한 다음 변경 사항 을 보류 해제합니다.
보류 해제 작업 중에 충돌이 발생하면 변경 사항을 병합하라는 메시지가 표시됩니다.

 

 

 

Force Checkout을 선택할 자의 결말

 

당신이 실수로라도 Force Checkout을 선택했다면, 모든 작업 내용은 증발하게 된다.

 

이러한 상황을 방지하기 위해 필요한 것이 바로 git stash 이다.

 


 

Git stash란?

 

git stash

git stash

A브랜치에서 코드 작성 도중 B브랜치 코드에 대해 볼일이 생겼을 때,
임시 저장 스택에 현재 브랜치의 작업 내용을 잠시 저장해놓는 용도로 사용한다.

 

 

 

A브랜치에서 terminal을 켜서

git stash -u

 

명령을 통해 작업 내용을 임시 저장소에 저장한다.

 

-u 옵션붙이지 않으면 변경 사항만 저장하며,
-u 옵션을 붙여야 새로 깃에 add한 내용까지도 임시 저장할 수 있다.

 

 

 

B브랜치에서 작업 후 A브랜치로 돌아와서

git stash pop

 

명령을 통해 가장 최근에 스택에 해두었던 작업 내용을 다시 되찾고,
임시 저장소에 스태시했던 내용 삭제한다.

 

 

여러 개를 스택에 저장할 순 없나요?

 

"가능합니다"

 

 


Stash List

 

stash는 여러 개도 보관할 수 있으며,

저장된 내용은

git stash list

명령을 통하여 확인할 수 있다.

스태시 목록 출력

 

 


Stash Name

 

스태시 이름

스태시의 이름은 git stash list 명령을 사용했을 때, 라인 좌측에서 확인할 수 있으며
'stash@{n}' 형태로 구성되어 있다.

 

 


Stash Description

 

git stash save 이름

 

stash를 수행할 때,

git stash save -u 스태시내용

 

다음과 같이 명령을 입력하면, 스태스의 내용도 적을 수 있기 때문에

스태시를 여러개 두고 관리 할 때, 뭐가 어떤 내용을 담고 있었는 지 쉽게 기억할 수 있다.

 

 


Stash Apply

 

git stash apply [stash 이름]

 

저장했던 여러 개의 스태시 중, 특정 스태시의 이름을 지정해 현재 브랜치에 적용하고 싶다면,

위와 같은 명령을 통해 수행이 가능하다.

 

 

 


Stash Drop

 

git stash drop 스태시이름

 

git stash drop 스태시이름

사용하지 않는 스태시는 스태시의 이름을 지정하여 다음과 같은 명령어로 제거가 가능하다.

 

 


 

해당 내용을 참고하여 여러분들도 안전한 브랜치 전략을 사용하길 바라며 글을 마친다.