Appia의 IT세상

[깃, Git] Git stash를 이용하여 변경사항 커밋없이 branch 전환하기 본문

Development/GIT

[깃, Git] Git stash를 이용하여 변경사항 커밋없이 branch 전환하기

Appia 2023. 12. 1. 08:38
반응형

[깃, Git] Git stash를 이용하여 변경사항 커밋없이 branch 전환하기

[깃, Git] Git stash를 이용하여 변경사항 커밋없이 branch 전환하기

 

이전 포스팅에서는 git diff를 이용하여, 다양한 조건에서의 차이점을 비교하는 방법에 대해서 이야기르 해봤습니다. 물론, 여러번 말했다시피, git diff는 필수 기능은 아니나, 알고 있으면 다양한 관점에서 매우 유용하게 접근이 가능합니다. 이번에는 branch(브랜치)를 전환할 때, 종종 걷는 문제점에 대해서 해결하는 방법에 대해서 이야기를 해보고자 합니다. 바로 git stash 기능입니다. 실제, 변경사항이 commit 되지 않을 경우에, branch(브랜치) 전환을 할 수 없습니다. 그 부분에 대해서 이야기를 해보고자 합니다. 

 

[깃, Git] Git diff 특정 branch(브랜치) / 특정 commit 비교하기

 

[깃, Git] Git diff 특정 branch(브랜치) / 특정 commit 비교하기

[깃, Git] Git diff 특정 branch(브랜치) / 특정 commit 비교하기 앞선 포스팅에서, git diff를 이용하여, 특정 파일의 변경사항을 확인하는 방법에 대해서 확인을 하였습니다. 아마도, 많은 분들은 이 부분

appia.tistory.com

 

먼저, 종종 branch(브랜치) 전환을 시도할 때, 다음과 같은 에러 메시지를 밖는 경험이 있을 것입니다. 

$ git switch target1
error: Your local changes to the following files would be overwritten by checkout:
        master_h.txt
Please commit your changes or stash them before you switch branches.
Aborting

 

실제, 위와 같은 에러는, 변경사항이 있는데, commit(커밋)없이 branch(브랜치) 전환을 시도할 경우에 발생합니다. 이럴 경우에 git stash을 자주 사용합니다. git stash라는 것은 쉽게 이야기 하면, commit 되지 않은 변경사항에 대해서 임시로 저장해두고, 그 부분에 대해서 원복을 하는 기능이라고 생각하시면 됩니다. 

 

먼저, 가장 간단하게 git stash을 사용하는 방법에 대해서 살펴보겠습니다. 

$ git stash / git stash save # 변경 사항 임시저장 
$ git stash pop # stash된 저장항목 불러오기

 

그러면 간단한 예제를 만들어서 테스트를 해보도록 하겠습니다. 먼저, 임의적으로 변경사항을 만들어서 문제 사항을 만들어보도록 하겠습니다. 파일 하나에 대해서 임의적으로 수정을 해보겠습니다. 

예제 생성을 위한 파일 수정

 

그런 후에 "git status" 명령어를 통해서, 현재 branch(브랜치)에 대한 상태에 대해서 확인을 해보겠습니다. 

git status를 이용한 현재 branch(브랜치)의 상태 확인

 

위에서의 결과 변경사항이 있는 것을 확인하였습니다. 그리고 나서, "git switch" 명령어를 이용하여 branch(브랜치)를 이동해보도록 하겠습니다. 

$ git switch target1

 

git switch 명령어를 통한 branch(브랜치)전환

 

위에서와 같이 문제사항이 발생함을 알 수 있습니다. stash을 진행해보도록 하겠습니다. 

$ git stash

위의 명령어를 통해서 변경사항에 대해서 임시 저장해보도록 하겠습니다. 

git stash 결과

위의 결과 다음과 같은 결과가 나타나는 것을 알 수 있습니다. 

$ git stash
Saved working directory and index state WIP on master: 651431f change1

 

그리고 나서, 다시 한번 git status 명령어를 통해서 branch(브랜치)의 상태를 확인해보도록 하겠습니다. 

git stash 이후 git status 결과

 

위에서와 같이 현재 branch(브랜치)에서 변동사항이 없는 것으로 보여집니다. 그러면 이 부분을 토대로 git switch 명령어를 통해서 branch(브랜치)를 전환해 보도록 하겠습니다. 

git stash 이후 git switch 결과

 

위의 과정을 통해서, 정상적으로 target1으로 branch(브랜치)전환을 이루었습니다. 그러면, 다시 master에서 이전에 stash한 변경사항들을 불러오도록 하겠습니다. 먼저, 다시 git switch 명령어를 통해서 master 브랜치로 이동하도록 하겠습니다. 

$ git switch master

 

위의 명령어를 통해서 branch(브랜치)를 전환하고 나서, 다음 명령어를 통해서 git stash에 저장된 임시 저장된 부분을 현재 branch(브랜치)에 적용해보도록 하겠습니다. 

$ git stash pop

git stash pop 결과

 

위의 결과로 다시 한번 "git status"로 현재 branch(브랜치)의 변경사항에 대해서 확인을 해보도록 하겠습니다. 이전에 변경사항이 없는 것처럼 나왔는데, 다시 변경사항이 생겼습니다. 즉, 임시 저장된 변경사항에 대해서 다시 불러온 것이라고 생각하시면 됩니다. 

git stash pop후 git status의 결과

 

위와 같은 방법으로 가장 쉽게 git stash/git stash pop를 적용할 수 있습니다. 

이번 포스팅에서는 [깃, Git] Git stash를 이용하여 변경사항 커밋없이 branch 전환하기라는 주제로 이야기를 해봤습니다. Merge conflict(머지 충돌)만큼이나 자주 사용되는 부분입니다. 물론, git stash도 다양하게 사용이 가능합니다만, 그 모든 기능을 사용하지는 않고, 상기에서 언급한 git stash/git stash pop정도만 사용해도, 충분합니다. 혹 궁금하시거나 문의 사항이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 

 

반응형
Comments