개발이 취미인 주니어 기획자

GIT 파헤쳐보기: git 기초(1) - git stash 본문

SW 지식/GIT

GIT 파헤쳐보기: git 기초(1) - git stash

큐 2022. 6. 11. 19:28
728x90
반응형

📦 GIT STASH

0️⃣ 첫만남

  • remote repository에서 같은 파일을 pull 받은 후에 각자 local에서 작업 > 다시 변경 전으로 돌아가야 하거나, 팀원이 내가 작업하는 기능과 관계있는 기능 작업을 완료해서 그 부분을 pull받고 내 작업을 이어가고 싶었던 경우
    • 즉, remote repository와 local repository내의 파일 차이가 있을 때 git pull을 하게 되면 하기 에러를 만날 수 있음!!

" 이대로 merge 하면 local에서 만든 change 다 덮어씌워진다? 그거 따로 저장해놔"

  • 사실 이때는 뭐가 뭔지 잘 몰라서 하라는대로 `git stash` 명령어를 써서 내가 local 에서 한 작업물들을 어따 짱박아놓고 무조건 git pull 한 후 + git pull 전 변경사항을 따로 메모장이나 카톡에 옮겨놓고 pull받은 파일 위에다가 복붙해서 작업을 이어나갔음
  • 그러나 이런 경우, 카톡 복붙 없이도 이런 과정을 거쳐서 내 작업물을 간단히 살릴 수 있다
$ git stash # local 작업물을 짱박아놓고 
$ git pull # remote에 있는 것들을 pull 받은 후 
$ git stash pop # 짱박아 놓은걸 pull받은 파일 위에다가 다시 뿌려줌(unstash)
  • 단, pull받은 코드와 내 변경 코드가 겹쳐서 conflict이 날 수 있다는 것 주의!
  • 이런 경우를 dirty tree에 pull 한다고 말함(pulling into a dirty tree)

 

1️⃣ 기본개념

 

Stash[동사]: (안전한 곳에) 넣어 두다[숨기다]
  • 사실, git stash란, local에서 변경된 변경 사항들을 임시로 저장해 주고, `master branch`에서의 상태로 되돌려주는 명령어임! 임시 저장이라고 생각하면 쉽다.
  • commit하기 전에 따로 임시저장 해놓고, 다른 일 하다가 다시 꺼내와서 일 할 수 있게 해주는 것
  • stash 는 stack처럼 동작한다
    • 따라서 stash 해 놓은 것을 pop 명령어로 가져올 때 가장 최근에 저장해 놓은 것을 가져옴

 

2️⃣ 언제, 어떤 파일에 쓸 수 있을까?

1. 일반적으로 언제 쓸까?

  • 새 branch를 따서 작업을 하는 도중, master branch에서 장애가 났다 - 해당 장애를 fix하기 위해서 장애가 난 환경(즉 master branch)에서 해당 장애를 재현해봐야 함
  • 그런데 내가 새로운 브랜치에서 commit 없이 작업을 하고 있을 때, master로 넘어갈려면 checkout을 해야하는데, checkout이 안됨
  • 이럴때 stash 로 임시저장을 해놓고, 즉 tree를 클린하게 해놓고 넘어가는 것

 

2. 어떤 파일에 쓸 수 있을까?

  • Modified면서 Tracked 상태인 파일
    • commit된 상태에서 추가적인 작업을 한 파일
  • Staging Area에 있는 상태
    • 즉, git add 는 되어있고, commit하기 전의 상태의 파일

 

3️⃣ 어떻게 제대로 쓸까?

1. stash 하기

$ git stash
$ git stash save [message]
  • 해당 두 명령어는 modified된 파일들을 따로 stash 하게 해주는 명령어

 

2. stash된 파일들의 리스트 보기

$ git stash list

  • 해당 명령어를 알게된 후 처음으로 stash list에 있는것을 확인했다....
  • 해당 list에는 따로 최대 갯수 제한은 없다
  • 해당 리스트의 가장 마지막 부분에 있는 이름들은 commit message들! 따라서 내가 stash하는 시점에서 이미 찍혀있던 commit 이라고 보면됩니당
  • stack 처럼 작동하기 때문에, 가장 최근에 저장한 것이 0번, 가장 예전에 저장했던 것이 더 큰 숫자가 됨

 

3. stash 가져오기

$ git stash apply stash@{숫자}
  • 지정된 stash를 불러온다. 단 이 명령어를 쓴다고 해서 stash list에서 사라지지는 않음
  • 만약 따로 숫자를 지정해주지 않는다면 가장 최신(stash@{0})의 파일을 불러온다.
  • --index 옵션 줄 수 있음
    • index 옵션을 사용하면, stash 된 파일을 staged된 상태로까지 복원해줌

 

4. stash 제거하기

$ git stash drop stash@{숫자}
$ git stash pop stash@{숫자}

  • `git stash drop`의 경우, 따로 숫자를 지정해주지 않는다면 가장 최근의 stash를 삭제
  • `git stash pop``git stash apply` + `git stash drop`과 같다고 생각하면 좋다. stash 이후 가장 최근에 stash 한 파일을 적용과 동시에, stash list에서 삭제해준다

 

5. stash 내용 보기

$ git stash show stash@{숫자}

  • stash 된 내용을 확인할 수 있다

 

6. stash 브랜치로 만들기

$ git stash branch <branchname> stash@{숫자}
  • stash 된 내용으로 새로운 브랜치를 만들 수 있다
  • 명령어가 실행된 이후에는 stash list에서 삭제됨
  • 이 명령어가 유용한 경우 - 작업을 하고 있었는데 따로 branch를 따지 않고 master branch에서 일을 하고 있었던 상황일 경우!

 


📌 참고문서/블로그

  1. git scm official documentation https://git-scm.com/docs/git-stash
  2. Heee's Development Blog https://gmlwjd9405.github.io/2018/05/18/git-stash.html
  3. LainyZine: 프로그래머 가이드 🐣 https://www.lainyzine.com/ko/
  4. https://stackoverflow.com/questions/4600037/is-there-a-maximum-number-of-git-stashes
  5. 개발 바보들의 놀이터 https://www.devpools.kr/2017/02/27/%EA%B0%9C%EB%B0%9C%EB%B0%94%EB%B3%B4%EB%93%A4-2%ED%99%94-git-stash/
  6. GitKraken https://www.gitkraken.com/learn/git/git-stash#:~:text=Git%20Stash%20List&text=The%20Git%20stash%20list%20command,stash%40%20and%20the%20desired%20index

 

 


 

블로그 내용에 문제가 있다면 댓글 혹은 아래로 연락주세요!

~대가리 꽃밭인 디지털 노마드가 꿈이예요~

🧚‍♀️ Gyumin Lee

📧 gyumin.q.lee@gmail.com

 

qminlee723 - Overview

noob. qminlee723 has 8 repositories available. Follow their code on GitHub.

github.com

 

728x90
반응형

'SW 지식 > GIT' 카테고리의 다른 글

GIT 파헤쳐보기: git 기초(3) - 3-way merge  (0) 2022.06.14
GIT 파헤쳐보기: git 기초(2) - git merge  (0) 2022.06.11