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로부터 업데이트된 상황을 당겨오는 일부터 하자
순서
- git stash
- git pull
- git stash pop
- 1번에서는 "나의 업데이트 내용"을 스택 한켠에 옮겨둔다. 그러면 나의 로컬은 "아무런 업데이트가 없는" = 즉 "내가 실행했던 가장 마지막 커밋을 가리키는 상태"로 돌아가는 셈이다
- 나의 로컬(working directory)이 깔끔해졌으니 remote repository의 업데이트를 불러오는 데 아무런 걸림돌이 없다. 일단 git pull로 나의 로컬을 최신 상태로 만들자
- remote repository와 동기화가 된 나의 로컬...... 그 위에 내 변경사항을 얹고 다시 시작하자. 그러려면 스택 한켠에 쌓아뒀던 내 업데이트 내용들을 다시 그 위에 쌓는다. "pop"은 스택구조(일종의 상자라고 생각한다면)에서 가장 위에 있는 내용물을 가져오는 명령어다
이렇게 하지 않는다면
git merge로 일일이 충돌사항을 점검해가면서 가지치기를 해야겠지만,
남이 작성한 코드와 나의 코드를 병합하는 일은 쉬운 일이 아니기에... 이 방법이 단연코 우리를 안전한 길로 인도할 것이라 확신합니다...
'기초' 카테고리의 다른 글
return 0의 의미 (0) | 2012.01.03 |
---|