개발 블로깅/오늘의 TIL

[2019.09.13] git stash 사용법 - 현재 상태를 저장해보자

Hello이뇽 2019. 9. 13. 19:49

 

최근에 A브랜치에서 작업을 완료 후 pull Request를 올렸다.

그리고 새로운 기능의 작업을 위해 B브랜치를 따서 쭉 작업하는 중, A브랜치에서 작업한 내용의 코드 리뷰를 받아 수정할 사항이 생겼다.

A브랜치로 넘어가 코드 수정을 해야하는데, B브랜치에서는 작업 중이다 보니 A브랜치로 그냥 넘어갈 수가 없다.

 

위 상황을 해결할 수 있는 방법은 아래와 같다.

  1. 현재 작업 중인 상황을 그대로 commit을 한다.
  2. 새로운 브랜치를 따서 commit 후, 다시 현재 브랜치로 돌아온다.
  3. git stash 명령어를 이용한다. 

 

3번의 git stash 명령어를 이용하면, branch를 새로 따거나, 불필요한 commit을 막을 수 있다.

 

git stash

현재의 상태를 임시로 저장한다. 

 

사용법 예시를 위한 세팅

해당 함수를 이용해서 git stash를 사용해보자.

practice.js파일 안에 calculate() 함수가 하나 있다.

해당 함수는 2개의 인자를 받아서 더한 값을 리턴한다.

해당 practice.js 파일을 새로 생성하여 함수를 선언했기 때문에 아직 untracked 상태이다.

 

현재 더하기 기능을 한 상태로 commit을 한다.

이후에 calculate 함수를 '나누기'로 변경한다. 

더하는 기능을 나누는 기능으로 변경 후 저장하니, 해당 파일이 modified 상태가 되었다. 

 

현재 상태 stash 저장

이 상황에서 현재 상태를 저장하고 최근 commit 상태로 돌아가려면 'git stash' 명령어를 사용한다.

 

그러면 현재 상태를 워킹 디렉토리에 임시로 저장되고 최근 commit 상태로 돌아가게 된다.

위 코드를 보면, 나누기로 변경하여 modified 상태였던 코드가, 최근 커밋한 더하기 기능으로 변경되었다.

 

git stash 리스트 확인

워킹 디렉토리의 stash 리스트를 확인하려면 'git stash list' 명령어를 입력한다.

터미널 부분에 보면, stash{0} 이라는 stash ID가 있다. 

 

해당 stash 상태로 돌아가기

해당 stash로 다시 돌아가려면 'git stash apply 'stash ID'를 입력하면 된다.

 

해당 stash로 돌아가니, 최근 commit 한 더하기 기능에서 다시 modified상태인 나누기 기능으로 돌아간 것을 확인할 수 있다.

 

stash list 내역 지우기

'git stash drop 'stash ID'' 명령어를 입력한다.

그러면  stash list에 저장되어 있던 해당 stash를 삭제할 수 있다.

 

git statsh 상태로 돌아가고, list에서 바로 삭제하기

만약 apply 후에 drop하는 기능을 한 번에 하려면 'git stash pop' 명령어를 입력한다.

다시 commit 상태로 돌아가기 위해 'git stash'를 한 후, 'git stash pop' 을 하니, 다시 해당 stash 상태로 돌아간 것을 확인할 수 있다.

(해당 stash는 list에서 삭제된 상태이다.)

 

 

이렇게 A브랜치에서 작업 후 B브랜치를 따서 작업 중에, 다시 A브랜치로 돌아가서 수정할 일이 생겼을 때, 현재 상태를 잠시 저장 후 작업할 수 있다.

 

반응형