[Git] Stash?
실제 업무상황에는 한번에 하나의 일만 하지는 못한다고 한다.
ex
- 지난 번에 개발했던 기능의 버그
- 급하게 들어온 핫픽스
- 진행하고 싶은 기능의 구현
이런 상황에선 기능 개발하다가 긴급 핫픽스 수정을 위해 반쪽짜리 커밋을 하고 브랜치를 바꿔서 수정하는 것은 매우 불편하고 협업하는 사람들에게 혼동을 줄 수 있다. 이를위해 만들어진 기능 Stash
커밋을 하지 않고 저장하는 임시저장과 같은 기능.
의미 없는 커밋 메시지를 줄일 수 있다.
예시
1. 현재 상황은 stash라는 프로젝트의 profileFix 브랜치에서 profile.txt의 이메일 작성과 gitID 입력하는 작업중이였다.
2. email 작성을 끝내고 gitID 입력 작업을 하려는 순간 hasTypo.txt 파일에서 우선순위가 높은 이슈가 발생했다. 그러면 내가 작업하던 profileFix 브랜치에서 한 작업은 완료가 안된 상태지만 커밋하고 브랜치를 바꿔서 hasTypo.txt 버그 수정작업에 들어가야 할까?
3. 선택지는 존재한다. 첫번째 선택지는 profileFix 작업을 쪼개서 email과 gitID 작업을 분리해서 커밋하는 방법도 있겠지만, 장단점이 존재하고 커밋할 수 없는 상황도 존재하기 때문이다.
4. 두번째 선택지는 Stash를 사용하는 것이다. 커밋을 하지 않은 상황에서 Stash를 하고 branch 를 hotfix로 옮기면, commit은 발생하지 않았지만, 임시저장이 되어있는 상황이라 차후에 profileFix 브랜치로 이동해도 이전에 했던 작업이 로드될것임.
stash를 이용한 작업들을 수행했고 그 작업들의 Git flow를 살펴보자
실행순서는 다음과 같다.
1. Git flow에 보이지는 않지만 제일 처음 profileFix 브랜치가 생성됨.
2. 작업도중 hotfix 수정요청이 들어옴. profileFix 작업이 완료되지 않았기 때문에 stash(임시저장)하고 hotfix브랜치로 이동
3. 수정을 완료하고 fix hasTypo.txt bug 라는 커밋을 날리고 master 브랜치에 바로 merge함.
4. 다시 profileFix로 돌아가려고하는데, todoList를 먼저 개발해달라고 하는 요청이 들어옴.
5. todoList 기능개발 완료하고 develop 브랜치에 merge함.
6. todoList가 추가된 develop을 master 브랜치에 다시 merge 함(요건 좀 잘못된건데... 뭐 예시니까..)
7. stash했던 profileFix 브랜치를 찾아서 stash를 pop함.
8. profileFix 개발이 완료되어 develop 브랜치로 merge함
9. profileFix 기능이 추가된 develop 브랜치에서 컨플릭트 문제가 전혀 없기때문에 master 브랜치로 merge 가버렷.