깃을 이용해서 협업을 할때 메인 브랜치는 직접 건드리지 않고
# 로컬 저장소
메인에서 브랜치를 만들어서 작업을 하고 push ->
# 리모트 저장소
pr을 보내고 -> 메인에서 머지가 되고 ->
# 로컬 저장소
업데이트된 메인을 pull로 받아서 로컬 main도 업데이트
이 작업을 반복하게 된다
그런데 실수로 브랜치를 내지 않고 메인에서 작업을 하다가 이 사실을 뒤늦게 깨달았을 때
메인을 처음으로(마지막 커밋 상태) 되돌리면서 작업 내용을 그대로 옮길 수 있는 방법이 있다.
초기 test.md파일

git stash
아직 커밋하지 않았을때
git stash를 사용하면 마지막 커밋부터 작업한 변경사항을 그대로 들어서 다른 브랜치로 옮길 수 있다.
stash를 하면 현재 브랜치는 다시 마지막 커밋 상태로 초기화 된다.
test.md 파일을 메인브랜치에서 수정하고 커밋하지 않은 상태


git stash

git stash를 하면 변경사항이 임시저장되고 노란색이던 main브랜치가 초록색으로 바뀐다.
git stash를 하면 변경내역이 stash에 저장되고
마지막 커밋 상태로 되돌아온다
test.md파일을 확인해 보면 수정 전의 상태로 돌아간 것을 확인할 수 있다.

git stash list
를 하게 되면 stash 내역을 볼 수 있다.
앞의 stash@{0} (숫자는 인덱스)로 나중에 특정 내역을 가져오거나 지울 수 있다.
인덱스 숫자는 stash가 쌓일수록 커지고 최신내용일수록 우선순위가 높다.

그래서 이 상태에서 브랜치를 만들고
git stash list로 확인해보면 스태시 내역을 볼 수 있고(마지막 커밋 메세지를 볼 수 있다. git stash save stash 이름 으로 원하는 이름으로 바꿀 수 있음) 이걸 그대로 새 브랜치로 가져올 수 있다.
여기서 아까 stash한 내용을 가져오면
git stash apply stash{0} # 0번 stash를 가져온다
git stash apply # 가장 최신 stash를 가져온다


커밋할 변경사항이 있다는 내용이 뜨고 test.md를 확인해보면 아까 수정한 그대로 바뀐 것을 볼 수 있다.
적용을 한 후에는 옮긴 브랜치에서 계속 작업을 하거나 커밋을 하고
git stash drop # 가장 최근 stash 삭제
git stash drop stash@{0} # 특정 stash 삭제
git stash clear # 모든 stash 삭제
이렇게 내역을 삭제해주는 것이 좋다
요약
메인에서 작업
(main) git stash
작업내용 옮길 브랜치 만들고 브랜치 이동
(새 브랜치) git stash apply
(새 브랜치) git stash drop
참고
'git & GitHub' 카테고리의 다른 글
| git | 추적 중지시키기 git rm --cached -r (0) | 2022.07.24 |
|---|---|
| git | 취소하기 git reset (0) | 2022.07.13 |
| GitHub | 원격으로 브랜치 이름 변경(master -> main), 브랜치 삭제 (0) | 2022.07.04 |
| git | 기본 브랜치 이름 master-main 변경하는법 (0) | 2022.07.03 |
| git & github (0) | 2022.07.02 |