본문 바로가기

기초

git stash: 직관적으로 이해하기

git stash의 직관적 이해



직관적 이해

  • 기본적으로 git stash는 현재 업데이트된 내용을 스택에 치워두는 명령어다
    • 내 로컬의 modified, staged contents들을 (=나의 변경사항을)
    • 스택구조 (한켠에 설정되어 있는 하나의 별도공간이라고 생각하자)에 (일시적으로) 담아둔다

언제 쓰일까?
  • git push을 하려고 보니 이미 remote repository에 다른 커밋(다른 변경사항)이 존재할 때
    • remote repository의 변경사항은 먼저 내 로컬에 반영하는 것이 원칙
    • 먼저 git pull을 통해 나의 working directory(내 로컬)을 업데이트해야 한다
  • git pull를 하니 다음과 같은 에러가 발생할 때
    • error: Your local changes to the following files would be overwritten by merge:

    • Please, commit your changes or stash them before you can merge
    • 내 변경사항과 remote의 변경사항이 충돌

이런 경우에, 현재 나의 업데이트는 일단 한켠에 제껴두고, remote repository로부터 업데이트된 상황을 당겨오는 일부터 하자



순서

  1. git stash
  2. git pull
  3. git stash pop
  • 1번에서는 "나의 업데이트 내용"을 스택 한켠에 옮겨둔다. 그러면 나의 로컬은 "아무런 업데이트가 없는" = 즉 "내가 실행했던 가장 마지막 커밋을 가리키는 상태"로 돌아가는 셈이다
  • 나의 로컬(working directory)이 깔끔해졌으니 remote repository의 업데이트를 불러오는 데 아무런 걸림돌이 없다. 일단 git pull로 나의 로컬을 최신 상태로 만들자
  • remote repository와 동기화가 된 나의 로컬...... 그 위에 내 변경사항을 얹고 다시 시작하자. 그러려면 스택 한켠에 쌓아뒀던 내 업데이트 내용들을 다시 그 위에 쌓는다. "pop"은 스택구조(일종의 상자라고 생각한다면)에서 가장 위에 있는 내용물을 가져오는 명령어다

이렇게 하지 않는다면 
git merge로 일일이 충돌사항을 점검해가면서 가지치기를 해야겠지만, 
남이 작성한 코드와 나의 코드를 병합하는 일은 쉬운 일이 아니기에... 이 방법이 단연코 우리를 안전한 길로 인도할 것이라 확신합니다...


'기초' 카테고리의 다른 글

return 0의 의미  (0) 2012.01.03