git stash, git 작업내용을 다른 branch로 옮기기
회사에서 다음 신규버전에 들어갈 웹소켓 기반 채팅 기능을 만들다가 프론트 개발 팀원과 협업이 필요하게 되서 현재 작업중인 브랜치말고 새로운 브랜치를 만들어서 작업하기로 했습니다.
아직 git이 익숙하지는 않다보니 branch를 새로 만들고 '현재 브랜치의 작업중인 파일을 복사할까?' 라는 생각을 하다가 git에서 좀더 편리한 방법을 제공할것 같아서 찾아보니 git stash 기능으로 변경사항을 일시적으로 보관하는 기능이 있어 사용해보았고 유용한 기능이라 생각되어 이글을 작성하게 되었습니다.
git 작업 흐름
우선 git의 작업 흐름 간단하게 알아볼 필요가 있습니다.
Working Directory(작업 디렉토리)
- 실제로 코드 작업을 합니다. 새로운 파일 생성, 수정, 삭제 등이 이루어집니다.
Staging Area(스테이지 영역)
- 커밋을 준비하는 장소로서, 커밋에 포함시킬 변경 내용을 선택하고 준비하는 단계입니다. 작업 디렉토리에서 수정한 파일 중에서 어떤 파일을 다음 커밋에 포함시킬지 결정합니다.
Repository(저장소)
- 스테이지 영역에 있는 변경 내용들을 커밋하여 이력을 기록하는 단계입니다. 커밋된 내용은 영구적으로 저장되어 프로젝트의 변경 이력을 관리합니다.
테스트로 test1, test2, test3 파일을 만들었고 각각의 파일 상태는 다음과 같습니다.
- test1.txt : Repository 에 등록된 파일이며 현재 로컬에서 수정되어 Working Directory 에 있습니다.
- test2.txt : 수정후 커밋을위해 git add 명령어로 StagingArea 에 올려놓은 상태입니다.
- text3.txt : Untracked는 아직 git이 알지 못하며 추적하지 않는 파일들을 나타내고 Working Directory 에 있습니다.
git stash
git stash 는 현재 작업 디렉토리의 변경사항을 임시로 보관할수 있는 기능입니다. 작업중에 다른 브랜치로 전환해야 하거나 커밋하지 않은 내용을 잠시 숨겨야 할때 사용할수 있습니다.
위에서 만들어놓은 작업경로에서 git stash 를 실행하면 어떻게 되는지 보겠습니다.
Untracked된 파일을 제외하고 git add 로 추가된 test2.txt 파일과 변경된 test1.txt 파일이 stash 되었고 git stash list 명령어로 현재 stash 목록을 확인할수 있습니다.
새로운 브랜치를 만들어서 checkout 하고 stash에 있는 작업내용을 git stash pop 명령어로 불러옵니다.
git stash pop 명령으로 stash를 적용후에 master 브랜치에서 git status 명령으로 확인했을때와 동일한 작업 상태가 적용된것을 확인할수 있습니다.
git stash push
git stash push 명령을 사용하면 git stash 명령보다 옵션을 추가하여 좀더 디테일하게 stash를 저장 할수 있습니다.
- git stash push -m : stash 저장시 메시지를 남길수 있다.
- git stash push -p : stash 저장시 파일단위, 코드단위를 지정할수 있다.
git stash push -p 의 각 옵션은 다음과 같은 의미가 있습니다.
- y: 현재 변경 사항을 스태시에 추가합니다.
- n: 현재 변경 사항을 스태시에 추가하지 않습니다.
- q: 스태시 작업을 종료하고 나갑니다.
- a: 모든 변경 사항을 스태시에 추가합니다.
- d: 변경 사항을 스태시에 추가하지 않고 남겨둡니다.
- e: 선택된 변경 사항을 에디터에서 편집한 후 스태시에 추가합니다.
- ?: 도움말을 표시하며 사용 가능한 모든 옵션을 보여줍니다.
git stash pop / apply / drop
위의 예제에서는 git stash pop 으로 stash 영역에서 작업내용을 불러왔는데 pop 은 stash에서 불러옴과 동시에 stash를 제거하는 명령입니다. 만약 stash를 제거하지 않으면서 작업내용만 불러오고 싶다면 git apply stash@{n} 명령어로 사용할수 있습니다.
git stash drop 명령어는 가장 최근에 저장된 stash를 제거하는 명령어인데 git stash drop stash@{n} 처럼 stash 이름을 지정하여 제거할수도 있습니다.
- git stash pop : 가장 최근에 저장한 stash를 적용하고 해당 stash를 제거하고 여러 개의 stash를 저장한 경우에는 주의해야됨
- git stash apply / git stash apply stash@{n} : 가장 최근에 저장된 stash를 불러오거나 stash 번호를 지정하여 불러올수 있고 stash 영역에서 제거하지 않는다.
- git stash apply / git stash apply stash@{n} : 가장 최근에 저장된 stash를 제거하거나 stash 번호를 지정하여 제거한다.
'Git' 카테고리의 다른 글
Github, Git 팀 협업 Workflow 가이드 (0) | 2024.11.18 |
---|---|
git merge, 브랜치 병합 도구 (0) | 2024.11.07 |
[Git] reset restore 작업 복구 커밋 되돌리기 (0) | 2024.06.16 |
댓글