Learn & Run

Git & Sourcetree - Stash란 무엇인가 본문

Collaboration/Git

Git & Sourcetree - Stash란 무엇인가

iron9462 2021. 5. 31. 22:07

목표

 

Stash가 무엇인지 그리고 어떤 기능을 하는지에 대해 알아보도록 합니다.

 

우리는 종종 어떤 일을 하는 도중에 급한 개선 건에 대한 처리를 요구받을 때가 있습니다. 또한 다른 기능에 대한 버그가 발생하여 하던것을 제쳐두고 그것을 우선적으로 해결하고 싶을때가 있습니다. 이런 경우에 쓰이는 기능에 Stash라는 기능입니다.

 

 

1. Stash가 의미하는 것이 무엇인지 알아보도록 합니다.

 

 

stash가 의미하는 것은 단순히 날리는 것만이 아니라 지정된 장소에 안전하고 비밀리에 저장하는 것을 의미합니다. 

 

 

2. Stash가 쓰이는 구체적인 상황을 예로 들어보겠습니다.

 

 

Uncommitted changes는 우리가 방금전까지 하고 있던 작업들을 의미한다고 가정해봅시다.

 

Working copy에 있는 모든 변화들을 안전하게 보관하시겠습니까? 라는 메시지가 나오게 됩니다.

 

Stash를 통해서 방금 하고있던 작업이 어딘가에 저장이 되었고 이전 버전 상태로 되돌아간 것을 확인할 수 있습니다. Stashes에 On master, stash가 의미하는 것을 생각해보면 stash라는 메시지로 저장된 파일은 master 브랜치에서 작업하고 있는 중이였다 정도로 생각해볼 수 있습니다. 우리는 이제서야 처리하고자 하는 급한 일을 먼저 처리할 수 있게 되었습니다.

 

Stash 파일을 클릭해보면 Staged Files에 관리된 것이 잘 저장되고 있음을 확인할 수 있습니다. 

 

Stash 파일에 마우스를 갖다댄 뒤 오른쪽 마우스 클릭을 통해 Apply Stash버튼을 누릅니다.

 

Stash를 저장소에 다시 적용할 것인지에 대한 팝업 메시지가 나오게 되고 Delete after applying은 적용한 후에 저장된 Stash파일을 지울것인지를 물어봅니다.

 

Apply 버튼을 누른 후에 Stash에 저장되었던 작업들이 원래대로 복구된 것을 확인할 수 있습니다.

 

 

3. Stash를 사용하면서 주의해야할 점이 무엇이 있는지 알아봅니다. 

 

  • Staged files, Unstaged files 둘 다 공존할 때 어떤식으로 Stash에 저장되는지 알아보도록 합니다.

 

Staged files와 Unstaged files가 공존하고 있는 상태에서 Stash file을 만들어 보도록 합니다.

 

확인된 결과 Staged files, Unstaged files결합된 상태로 Stash에 저장되는 것을 확인할 수 있습니다.

 

Apply stash 버튼을 누른 후에 Working copy로 작업이 복구되는 것을 확인할 수 있습니다.

 

 

  • Stash file이 포함하고 있는 작업을 변경했을 때 일어나는 충돌에 대해 확인해보도록 합니다. 

 

현재 Stash file은 위의 사진과 같습니다.

 

현재 Commit된 버전은 Stash files과 같은 공간에서 작업을 한 상태인것을 확인할 수 있습니다.

 

Apply Stash 버튼을 누른 후에 다음과 같은 충돌이 발생하게 됩니다. 왜냐하면 같은 공간에서 작업을 진행했기 때문입니다.

 

실제 파일 내용도 위와 같이 뜨는 것을 확인할 수 있고 충돌이 일어났을 때는 우리에게 수정 권한을 위임하는 것 이므로 변경 사항을 수정하고 저장하도록 합니다.

 

이후에 수정 사항을 확정지으면 우리가 의도하던 대로 충돌 문제를 해결하고 변경 사항을 Commit 한 것을 확인할 수 있습니다.

 

이 과정을 통해서 Stash를 사용해도 충돌이 일어난 잠재적인 위험은 가지고 있다는 것을 명심할 필요가 있습니다.