Byeonguk Kim

안녕하세요. 29살의 조금은 늦은 나이로 새롭게 개발자로 시작하는 신입 개발자입니다. 포트폴리오 [https://deaguowl.github.io]

GIT 04. Git stash와 git

01 Aug 2019 » GIT

2019.08.01 git stash와 git에 대해서

(TIL은 스스로 이해한 것을 바탕으로 정리한 것으로 오류가 있을 수 있습니다)

# 질문에 답하기

git

  • git에 대해서 잘못 알고 있었던 부분들이 좀 있었던 것 같다. 그동안 크게 협업을 할 일도 없었고, 크게 브랜치를 섞어가면서 쓸 일도 없었고, git은 그저 소스코드를 관리해주는 용도로만 생각했다. 음 내가 생각한 git은 github(원격저장소)에 가깝다고 하는 게 맞을 것 같다.

잘못된 브랜치에서의 작업

  • 하나의 브랜치에서 한개의 작업을 한다. 그리고 이것에 대해서 너무나도 쉽게 잊어버렸다. ㅎㅎ
  • 가장 첫 번째 작업을 하나의 브랜치에서 작업을 했다. 그리고 commit와 push까지 완료하였다.
  • 하지만 나는 새로운 브랜치를 만들지 않고, 현재의 브랜치에서 또 작업을 진행했다….
  • 평소 같았으면 또 commit과 push를 했을테지만 여기는 회사다 ㅠㅠ
  • 당황한 나는 새로운 브랜치로 옴겨가려고 하였다. 그리고 git checkout master 명령으로 master브랜치로 가려고 하니, 에러 메시지가 발생하였다.

8E426D7E-4E84-4705-ACBC-1EF7209FE1BC

  • 이 메시지를 보고 신나게 checkout – <파일>을 입력하였다.
  • 그리고 branch를 이동하였다.
  • 근데 다시 작업하던 브랜치로 이동하였을 때 그동안 내가 해놓은 코드들은 모두 사라졌다….
  • 무슨 일????? ㅠㅠㅠㅠ

git은 형상관리를 해준다.

  • 이게 무슨 일인가 당황해하고 있는 나에게 사수분께서 설명해주셨다.
  • git은 형상관리를 하기 때문에 소스의 변화를 끊임없이 감지하고 있고, 위에 git checkout – <파일>을 진행함으로서 내가 그동안 작업한 것을 모두 되돌린다는 의미이다. 왜냐하면 git commit을 해주지 않았기 때문이다. git add 와 git commit을 통해서 local에 내가 진행했던 코드들에 대해서 저장을 했어야 했는데 하지 않았기 떄문이다 ㅠㅠ.
  • 또 추가적으로 알게 된 것은 이렇게 잘못된 브랜치에서 작업했을 경우 git stash라는 명령어를 활용할 수 있다는 것이다.

git stash

  • git stash는 내가 브랜치에서 작업하다가 다른 branch로 옴겨야 하는 경우가 생겼을 때 commit하지 않고 잠시 작업하던 것을 보관하고 다른 branch로 넘어가는 것이다.
  • 나는 그동안 당연히 !!! 너무나 당연히 git stash처럼 된다고 생각했다. 내가 작업했던 중에 다른 브랜치로 이동해도 내 화면에는 그대로 내가 작업하던 것들이 남아 있으리라 생각했다.
  • 하지만 git은 브랜치 단위로 관리되고 각 branch마다 정말 소스코드가 관리되고 있었다. 즉 각 브랜치로 이동할 때 마다 내 화면에도 소스코드가 모두 변한다는 것이다. 그 동안 진행하였던 프로젝트는 크지 않아 크게 느끼지 않았는데 정말 브랜치를 이동해보니 각각의 코드 상황이 달랐다.
  • 따라서 만약에 해당 상황이 발생하면 git stash를 기억하자

git stash 명령어

  • git stash : 하던 작업을 저장하고 가장 최근 commit상태로 만든다.(임시저장)
  • 해당 브랜치 이동
  • git stash pop 또는 git stash apply : 저장되어 있는 작업 중 가장 최근 stash를 가져와서 적용
    • git stash pop은 stash list에 남지 않고 stash apply는 stash list에 남는다.
  • git stash list : stash 목록을 본다.