Git stash로 다른 브랜치에 로컬 변경사항 옮겨서 적용하기

2023. 11. 22. 23:52프로그래밍/Git

작업을 하다보면 내 로컬의 히스토리가 이상하게 꼬여있거나 혹은 로컬에서 브랜치를 바꿔서 작업하다가 

그 사실을 잊고 변경사항을 만들어버렸을 때 커밋은 하지 않고 변경사항을 그대로 가지고 다른 브랜치로 이동하고 싶을 수 있다.

이럴때는 git stash를 이용하면 된다. 

git add . 한 상태라면 변경사항이 적용돼있다.

git stash는 로컬의 변경사항을 인식해야지만 그 변경사항 그대로 임시적으로 저장해놓을 수 있다.

따라서 git add를 해서 git status로 변경사항을 감지하지 못하고 있다면 git reset을 입력하면 변경사항을 add하지 않은 상태로 다시 돌릴 수 있다. 그러나 git add . 도 하고 git commit 까지 날린 상태라면 다음과 같이 commit을 날려야한다.

git reset HEAD~1 --soft 
이는 로컬의 변경사항은 유지한채 커밋은 없애겠다는 뜻이다. 

이 명령어를 사용하고 난 후에 status를 해보면 다시 modified인 상태의 파일들이 감지된다.

그렇다면 git stash를 통해 현재 변경사항을 stash해놓는다.

이후에 내가 원하는 브랜치로 checkout으로 바꾼다.

그리고 stash한 목록을 보기 위해서는 git stash list 를 입력하고

stash를 현재 로컬에 저장하려면 git stash apply stash@{1} 과 같이 사용한다.

그러고 git status를 해보면 현재 로컬에 변경사항이 발생한 것을 확인할 수 있다.

git stash show stash@{1}을 하면 stash한 내용이 뭔지도 알 수 있다.