git stash

정민교·2023년 6월 2일
0

git

목록 보기
9/22
post-thumbnail

✔️ 임시 저장

git stash를 이용해서 변경 사항들을 임시 저장할 수 있습니다.

master 브랜치에서 작업하다가 커밋을 하고, 새로운 브랜치를 만들어서 새로운 브랜치로 이동한 후 여러 변경사항들을 만들었다고 가정합시다.

이 변경사항들을 아직 커밋하지 않았는데, 다시 master 브랜치로 돌아가야 할 일이 생겼습니다.

git switch master

어떤 일이 발생할까요?

  1. 아직 커밋하지 않은 변경사항들이 master 브랜치로 따라옵니다.

변경 사항들에 충돌이 발생하지 않는 한 내가 새로운 브랜치에서 작업한 내용들이 내가 master 브랜치로 이동할 때 따라올 것입니다

  1. master 브랜치로 이동하지 못하게 막습니다.

파일 사이에 충돌이 발생하여 새 브랜치에서 작업한 내용을 master 브랜치로 가져올 수 없는 경우, 브랜치를 이동하지 못하게 막습니다.

📌어떻게 해결해야 할까?

크게 세 가지 방법이 존재합니다.

  1. 충돌이 발생하지 않는 경우 그냥 옮긴다.

문제가 있습니다. 충돌이 발생하지 않아서 다행이도 master 브랜치로 문제없이 돌아갈 수 있었지만

내가 새로운 브랜치에서 작업했던 변경사항들이 모두 따라와서 내가 알던 master 브랜치의 마지막 모습이 아닐 수 있습니다.

심지어 따라온 작업들이 마무리 되지 않은 작업들이라면 더 맘에 안 들 수 있습니다.

  1. 현재까지 만든 변경 사항(작업)을 커밋하고 이동한다.

하지만 여기서도 문제가 있습니다. 내가 현재까지 한 작업이 아직 마무리 되지 않아서 커밋을 할 수 없는 경우 문제가 됩니다.

고작 브랜치를 이동하기 위해서 모든 작업들을 마무리하고 커밋까지 한 후 브랜치를 이동해야 하는 것은 너무 불편합니다.

심지어 브랜치를 이동해야 하는 이유가 별 같지도 않은 사소한 이유라면 커밋까지 한 후 이동해야 한다는 사실이 화가 날지도 모르겠습니다.

  1. 현재까지 만든 변경 사항들을 임시로 저장하고 이동합니다.

현재까지 만든 변경 사항들을 임시로 저장한다면 굳이 아직 완료되지 않은 작업을 커밋하여 더러운 커밋 이력을 남기거나 할 필요가 없습니다.

📌git stash(shorthand of git stash save), git stash pop, git stash apply

git stash or git stash save

명령을 실행하면 그 동안 작업했던 변경 사항(stage에 올렸던 올리지 않았던 모든 변경 사항을 말합니다.)을 임시로 저장하여 다른 임시 공간(스태시(stash))에 보관했다가

다른 브랜치로 이동해서 급했던 작업을 마무리 한 후, 다시 돌아와서

git stash pop

가장 최근에 임시로 저장한 변경 사항들을 working tree로 복원할 수 있습니다.

stash pop 은 스태시 영역에 있던 임시 저장 작업물을 스태시 영역에서 삭제하고 동시에 working tree로 복원합니다.

git stash apply

apply 는 스태시 영역에 있던 작업물을 working tree에 복원하지만 스태시 영역에서 삭제하지는 않습니다.

다른 브랜치에도 혹시나 이 임시 작업물을 적용해야 할 일이 있다면 apply 가 유용할 것입니다.

📌stash stack, git stash list, stash drop, stash clear

git stash 를 여러 번 수행할 수 있습니다.

그럼 stash 영역에 임시 저장한 작업물들이 순서대로 쌓이게 됩니다.

stash 영역에 얼마나 많은 stash가 있는지 확인하려면

git stash list

위 명령어를 실행하여 확인할 수 있습니다.

각 stash들은 서로 다른 stash를 구별할 수 있는 아이디를 가지고 있습니다.

stash@{0}
stash@{1}
stash@{2}
...

이런식으로 각 stash에는 뒤에 골뱅이(at sign)와 번호가 붙습니다.

이 아이디를 이용하여 적용할 stash를 골라서 적용할 수도 있습니다.

git stash apply stash@{1}

그런데 apply를 사용하면 stash 영역에 있는 stash들을 삭제하지 않는다고 했습니다.

그렇다면 실제로 직접 지워주기도 해야합니다.

git stash drop stash@{1}

아니면 그냥 통째로 stash 영역에 있는 stash들을 지울수도 있습니다.

git stash clear

다음 포스팅에서는 stash 명령어를 연습해보겠습니다.


🙏🙏🙏
git 시리즈에 작성한 포스팅은

https://www.udemy.com/course/best-git-github/
유데미 강좌
https://www.yes24.com/Product/Goods/110795446
모두의 깃 & 깃허브

위 내용을 참고하였으며, 제 실습화면을 캡쳐한 사진 외의

대부분의 사진들은 인터넷 강좌에서 제공하는 자료를 캡쳐하였습니다.

깃 시리즈 포스팅의 내용 및 사진을 절대로 상업적 목적으로 무단 복사하지 말아주세요.

profile
백엔드 개발자

0개의 댓글