❓ 내 브랜치에서 코드를 작업하는 중에, 다른 개발자의 PR을 리뷰해야 하는 상황이 종종 발생한다. 그런데 변경 사항을 커밋하지 않고 다른 브랜치로 전환하려고 하면 에러가 발생할 수 있다. 이는 충돌 문제 때문이다.
💡 이런 경우, git stash 명령어가 매우 유용하다. 이 명령어를 사용하면 현재 작업 중인 내용을 임시로 저장하고, 안전하게 다른 브랜치로 전환할 수 있다. 이후, 다시 원래 브랜치로 돌아와 작업을 복구하면 된다.
코드를 작업하던 중 다른 브랜치로 전환하거나, 잠시 작업을 중단해야 할 때 git stash를 사용하여 변경 사항을 임시로 저장할 수 있다.
git stash save
혹은 저장할 때 커밋처럼 메시지를 추가해 작업 내용을 구체적으로 남길 수 있다.
git stash save -m "작업 내용 메시지"
이 명령어를 사용하면 현재 변경된 코드들이 stash라는 임시 저장소에 저장되고, 작업 디렉토리는 이전 상태로 복원된다.
저장해 두었던 작업을 다시 복구하려면 git stash pop 명령어를 사용한다.
git stash pop
이 명령어는 가장 최근에 저장된 stash를 적용하면서 동시에 해당 stash를 목록에서 제거한다.
만약 stash pop을 했는데 문제가 생겼다면, 바로 취소할 수 있다. git reset --merge 명령어를 사용하면 최근의 변경 사항을 되돌리고 다시 깨끗한 상태로 돌아갈 수 있다.
git reset --merge
stash에 저장된 모든 작업을 확인하려면 git stash list 명령어를 사용하면 된다.
git stash list
이 명령어를 실행하면 각 stash에 대해 고유한 ID와 함께, 저장한 메시지와 해당 시점의 브랜치 정보를 볼 수 있다.
여러 개의 stash가 존재할 경우, 특정 stash를 꺼내고 싶다면, stash@{n} 형식으로 stash ID를 지정할 수 있다.
git stash apply stash@{1}
이 명령어는 해당 stash의 변경 사항을 적용하지만, pop과 달리 목록에서 제거하지는 않는다. stash를 유지하고 싶을 때 유용하다.
최근에 저장한 stash가 더 이상 필요 없으면 git stash drop 명령어로 제거할 수 있다.
git stash drop
특정 stash를 지정하여 삭제하고 싶다면, stash ID를 함께 명시하면 된다.
git stash drop stash@{1}
모든 stash를 한 번에 삭제하고 싶다면 git stash clear 명령어를 사용한다. 이 명령어는 stash에 저장된 모든 내용을 삭제한다. 되돌릴 수 없으므로 주의해야 한다.
git stash clear
위 명령어들을 기억해뒀다가 작업 중간에 다른 브랜치로 전환하거나 잠시 작업을 중단할 경우가 생겼을 때 유용하게 활용해보자. 👋🏻