내용을 수정하고 그냥 다른 브랜치로 체크아웃하면 아래와 같이 overwritten될 수 있다는 경고메시지가 뜬다.

그래서 commit하거나 stash하라는 안내가 나오는데

 

여기서 git stash에 대해서 알아보려고 한다.

이때 스택은 어떤 데이터를 저장하는 추상 구조로

LIFO: Last In First Out 가장 마지막에 들어온 데이터가 가장 먼저 삭제된다.

데이터간 순서 관계를 유지할 수 있다는 장점이 있고, 세개의 연산이 가능하다.

1. 맨 뒤 데이터 추가

2. 맨 뒤 데이터 삭제

3. 맨 뒤 데이터 접근

 

 

안내 문구대로 git stash를 하고 list를 보면

stack에 {0} 첫번째로 쌓여있는것을 확인할 수 있다.

 

즉, git stash는 최근 커밋 이후로 작업했던 내용은 모두 스택에 옮겨지고

working directory 내부는 다시 최근 커밋의 상태로 초기화 된다.

 

작업내용이 stack에 옮겨져 있는 상태이기 때문에

안전하게 다른 브랜치로 옮겨가서 필요한 작업을 하고 돌아와도

 

git stash apply를 하면 stack에 옮겨져 있던 작업내용이 그대로 반영 되어서

하던 작업을 마저 진행 할 수 있다.

작업을 진행하고나면 add후 commit~

 

 

정리하자면 git stash는

어떤 브랜치에서 하던 작업을 아직 커밋하지 않았는데

다른 브랜치로 가야하는 상황에서 작업 중이던 내용을 잠깐 저장하고 싶을 떄 쓴다.

실무에서는 작업을 하던 도중에 갑작스럽게 해결해야하는 작업이 또 생기기 마련이기 때문에

아주 유용하게 쓸 수 있다.

 

 

++

참고로 stack은 모든 브랜치에서 공유한다.

 

 


 

++

git stash를 쓰는 또다른 상황은 잘못된 브랜치에서 작업했을 경우!

상황예시는 이렇다,

 

 

아래처럼 충돌이 생기는 부분은 해결하고

정확한 stash list 아이디를 적어서 적용하고 add commit하면 끝.

정리하면 잘못된 브랜치에서 작업하는 실수를 했을 땐

1. git stash로 stack에 작업 내용을 저장!

2. 올바른 브랜치로 가서 다시 git stash apply를 한다!

 

근데 이런식으로 하면 작업 내용이 너무 많이 쌓여서 stack을 보기가 힘드니깐

이미 적용한 작업 내용은 지워줘야 한다.

 

잘 사용하면 이롭다.

git stash

git stash apply

git stash drop

 

++

git stash apply 와 git stash drop 을 한번에 적용 해주는 커맨드도 있다.

=> git stash pop

이 커맨드를 쓰면 특정작업내용을 적용함과 동시에 그것을 스택에서 제거한다.

더보기

1. git stash 하기

아래 그림과 같은 README.md 파일을 갖고 해볼게요.

기존의 내용에 테스트용 문장인 '"git stash pop" 테스트' 라는 문장을 추가해볼게요.

그 다음 파일을 저장(Save)하고

작업 내용을 스택에 저장(git stash)할게요.

이때 잠깐 README.md 파일을 보면 아래 그림처럼 원래대로 돌아옵니다. 

작업 내용을 스택에 저장(git stash)하고 나면 파일의 내용은 작업하기 이전의 상태(=최신 커밋에서의 상태)로 돌아온다고 했었죠?

지금 정상적인 상태니까 당황하지 마세요.

자, 이제 스택에 저장된 작업 내용을 살펴볼게요. git stash list 커맨드로 확인해보면,

방금 한 작업 내용이 잘 저장되어 있습니다.

2. git stash pop 하기

이 상태에서 

git stash pop

을 실행할게요.

그럼 README.md 파일이 변경되었다는 문장이 출력됩니다. 다시 README.md 파일을 보면, 

작업 내용이 복원되었습니다. 여기까지는 git stash apply와 차이가 없습니다. 

하지만 다시 스택을 들여다보면,

아무것도 출력되지 않습니다. 아까 설명한 대로 git stash pop은 작업 내용을 적용하면서 동시에 스택에서 제거하기 때문입니다.

참고로, 

git stash pop [작업 내용의 아이디]

git stash pop 커맨드는

[작업 내용의 아이디]를 인자로 주면, 특정 작업 내용을 적용하면서 스택에서 제거합니다.

[작업 내용의 아이디]를 인자로 주지 않으면, 가장 최근에 한 작업 내용을 적용하면서 스택에서 제거합니다. 

자, 이번 노트에서는 git stash pop 커맨드를 배웠는데요.

앞으로 스택에 저장된 작업 내용을 working directory에 적용할 때

  • 그 작업 내용을 나중에 또 쓸 필요가 있다면 git stash apply
  • 나중에 또 쓸 필요가 없다면 git stash pop을 쓰면 됩니다. 

일반적으로는 후자의 경우가 더 많을 겁니다.

 

 

'EDU > codeIt' 카테고리의 다른 글

git reset --mixed, --soft 옵션  (0) 2021.11.04
git cherry-pick  (0) 2021.11.04
git rebase와 git merge의 차이점  (0) 2021.11.04
MySQL 과제모음  (0) 2021.10.13
MySQL 서브쿼리와 뷰를 활용한 데이터 분석  (0) 2021.10.13

+ Recent posts