Git

[Git] git stash 란?

범데이 2022. 12. 17. 16:50

1.개요

현업에서 git으로 소스관리를 하다보면, git stash 명령어를 종종 사용하게 된다.

오늘 이포스팅을 통해 git stash가 무엇인지, 어떻게 사용하는지 및 활용 방법을 정리하고자 한다.

 

 

 

2. git stash란?

 

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

만일 내가 어떤 프로젝트에서 한 부분을 담당하고 있다고 가정하자. 그리고 여기에서 뭔가 작업하던 일이 있고 다른 요청이 들어와서 잠시 브랜치를 변경해야 할 일이 생겼다. 그런제 이런 상황에서 아직 완료되지 않은 일을 커밋하는 것이 껄끄러울수 있다. 커밋하지 않고 나중에 다시 돌아와서 작업을 다시 하고 싶을 것이다. 이럴 때에 git stash라는 명령어로 해결할 수 있다.

 

stash 명령을 사용하면 워킹디렉토리에서 수정한 파일들만 저장한다. stash는 modified이면서 tracked상태인 파일과 staging area에 있는 파일들을 보관해두는 장소이다. 아직 끝내지 않은 수정사항을 스택에 잠시 저장했다가 나중에 다시 적용할 수 있다.(브랜치가 달라져도 가능하다.)

 

 

 

 

3. git stash 사용방법

git stash의 기본 사용법을 살펴보자.

 

아래와 같이 1.txt이라는 파일을 만들어 staging하였다.

 

 

(1) git stash - 변경사항 스태시(보관)

이제 git stash명령어를 통해 변경사항을 보관해두자. stash를 수행하니 만들었던 파일이 없어졌다. 

이후 git stash list 명령어로 스태시 리스트를 확인해보니 방금 보관하였던 스태시가 출력된다.

 

보통 스태시에 보관하고 나면, 이를 다시 꺼내거나 지우거나, 적용하게 되는데 하나씩 해보자. 

 

 

(2) git stash pop - 스태시 꺼내기

보관된 변경사항을 다시 꺼내보자.

이 때에는 git stash pop [<stash>] 명령어를 사용하면 된다.

만들었던 1.txt파일이 다시 스태시에서 꺼내져서 워킹 디렉토리에 위치함을 확인할 수 있다.

 

 

(3) git stash drop - 스태시 삭제

스태시를 만들기 위해 1.txt는 다시 스태시하였다.

이번엔 보관된 스태시를 삭제해보자.

이 때에는 git stash drop [<stash>] 명령어를 사용하면 된다.

 

 

 

(4) git stash apply - 스태시 적용

스태시를 만들기 위해 1.txt파일을 다시 만든 후 스태시하였다.

이번엔 스태시를 적용해 보자.

스태시를 적용한다는 것은 스태시된 변경사항을 리스트에서 삭제하지 않고  적용한다는 것을 뜻한다.

이 때에는 git stash apply [<stash>] 명령어를 사용하면 된다.

위와 같이 스태시를 적용한 후 확인해보면

스태시되었던 변경사항이 다시 적용되었고, 스태시 목록에도 그대로 남아있는 것을 확인할 수 있다.

 

 

그외 stash관련 명령어는 git stash --help 명령어를 통해 git 공식 문서로 자세히 살펴볼 수 있다.

 

 

4. 스태시 활용사례

스태시를 어떻게 활용하냐는 것은 정답이 없고, 개발자가 필요할 때에 맞춰서 사용하면 되지만,

현업에서 내가 활용했던 상황들은 다음과 같은 경우들이었다. 참고용으로 읽어보면 좋다.

 

(1) 수정하던것을 적용하지 않고 이전 버전을 다시 배포할 때

만일 이전 버전이 상용으로 배포되어 있고, 다음 버전을 개발하던 중 배포된 프로그램에 일부 이슈가 생겨서 다시 배포를 해야 할 때, 스태시를 사용하여 변경사항을 저장한 뒤에, 이슈를 해결하여 배포하였다.

 그런 다음 스태시되었던 변경사항을 다시 꺼내서 다음 버전의 개발을 재개할 수 있었다. 만일 스태시가 없었으면 변경사항을 갖고있는 워킹 디렉토리는 그대로 두고, 이전 버전을 다른 곳에 다시 클론을 받아서 이슈 해결 작업을 했거나, 변경사항이 작지 않다면 따로 적어둔 채로 모두 되돌린 뒤에 이슈 해결을 했을 것이다.

 

 

(2) 원격 레포지토리의 수정사항과 병합 충돌이 났을 때에

다른 개발자분과 당일 같은 파일을 수정한 후, 푸시를 하기위해 동기화(풀+푸시)를 할 때에, 병합 충돌이 나는 경우에 풀이 안될 때가 있다. 이 때에 스태시를 사용해서 나의 변경사항을 보관한 뒤에 풀을 하여 원격 레포지토리의 수정사항을 모두 받은 후, 스태시를 다시 꺼내어 내 변경사항과 원격 레포지토리의 원격사항을 비교하여 병합 충돌 머지를 좀 더 직관적으로 직접 해결할 수 있게 되었다.

 

 

(3) 프로그램 수정 중 버그가 발생하였는데, 파일이 너무 많을 때에

프로그램을 개발하던 중, 어느정도 수정사항이 생겼을때 테스트를 해보게 된다. 근데 테스트를 했는데 어디서 꼬였는지 모를 경우가 발생한다. 물론 웬만한 버그들은 에러 로그를 보거나 변경된 소스를 리뷰하여 문제가 될만한 부분들을 찾기 마련인데, 이렇게 해도 찾을수 없거나, 어느 파일에서 에러가 유발되는지 확인하려 할 때에 변경한 파일들을 검토하고 하나씩 스태시에 보관하면서 프로그램을 실행시켜 보며, 어느 파일이 에러를 유발했었는 체크할 수 있다. 이렇게 하면 디버그할 파일을 한 파일로 좁힐 수 있어 에러원인들을 소거하는데 좋은 도구가 될 수 있다.

 

 


#References

https://gmlwjd9405.github.io/2018/05/18/git-stash.html

https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning

 

반응형