
특정 브랜치에서 작업을 하다 보면 작업을 다 끝마치지 않은 상태에서 다른 브랜치로 넘어가야 하는 경우가 있다.

하지만 checkout으로 다른 브랜치로 넘어가려고 하면 다음과 같은 'your local changes to the following files would be overwritten by checkout'이라는 문구가 발생한다는 것을 볼 수 있을 것이다.
이와 같은 문구가 발생한 이유는 브랜치 이동을 위해 checkout하면 HEAD가 다른 브랜치를 가리켜 워킹 디렉토리의 내부 또한 옮겨간 브랜치의 커밋의 내용대로 바뀌게 되어 여태까지 작업한 내용들이 모두 사라질 수 있기 때문이다.
이렇게 알고 보니 잘못된 브랜치에서 작업을 하고 있었다든가, 어떤 브랜치에서 하던 작업을 아직 커밋하기 싫은데 다른 브랜치로 잠깐 갔다와야 해서 작업 중이던 내용을 잠깐 저장하고 싶을 때에는
git stash -u # -u 생략시 새 파일들은 저장 제외
커맨드를 사용해야 한다.
git stash 커맨드를 입력하면 현재 브랜치에서 최근 커밋 이후로 작업했던 내용이 모두 로컬 레포지토리의 스택이라는 저장 공간에 워킹 디렉토리 내부는 다시 최근 커밋 상태로 초기화된다.
다만 최근 커밋 이후로 아직 한 번도 add되지 않아 untracked 상태인 파일들은 git stash만으로는 스택에 저장되지 않아 git add 후 stash를 하거나 --include -untracked 옵션의 줄임말인 -u를 뒤에 붙어주어야 한다.

해당 문구가 출력되면 작업한 내용이 스택에 잘 저장되었다는 의미이다.
이후 저장한 임시 작업을 가져오고 싶은 브랜치로 이동해서
git stash apply [작업 아이디] # 작업 아이디는 스택 내용을 확인하는 git stash list로 확인 가능
git stash pop # 가장 최근에 저장한 작업 내용 불러오기 및 스택에서 자동 삭제
이 두가지 커맨드를 상황에 따라 선택하여 사용하면 현재 브랜치의 워킹 디렉토리에 저장한 작업 내용을 가져올 수 있다.
만약 충돌이 발생한다면 충돌되는 부분을 삭제, 조정하여 충돌 해결 후 평소처럼 add-commit을 수행하면 된다.
git stash list # 스택에 저장된 작업 아이디 확인
git stash drop [작업 아이디] # 스택에서 해당 작업 삭제
작업을 하다 보면 특정 커밋의 작업 내용만 현재 브랜치의 내 워킹 디렉토리로 가져오고 싶을 때가 있다. 이 때 사용하는 커맨드가 git cherry-pick이다.
git cherry-pick [커밋 아이디]
*해당 포스팅은 코드잇의 강의를 참고하였습니다.