생활코딩 GIT CLI 협업 강의를 듣고 작성했습니다.
fetch란 원격저장소에 내 변경사항을 반영한 버전을 생성하고, 이를 다시 로컬저장소로 가져오는 것을 말한다.
사실 fetch는 pull 보다 push와 헷갈렸다. push도 내 변경사항을 반영하는 것 아닌가? 싶었다. 하지만 잘 생각해보면 아래의 모델로 이해하는 게 정확해보인다.
push : 로컬 -> 원격
fetch: 원격 -> 로컬
fetch가 내 변경사항을 먼저 원격저장소와 동기화 하는 이유는 그래야 원격 -> 로컬을 할 수 있기 때문이다. 어찌보면 fetch가 push를 자동으로 포함하는 거라고도 생각할 수 있다.
로컬 저장소에 동기화를 하느냐. 즉 원격저장소에 있는 새 버전을 내 로컬저장소에서도 생성하는지의 여부가 차이점이다.
fetch는 원격저장소에서 새 버전을 생성하고, 로컬저장소에는 가져오기만 한다.)
(원격저장소의 새로운 버전을 임의의 브런치를 생성하여 가져올 뿐이다.)
pull은 원격저장소에서 새 버전을 생성하고, 로컬저장소에도 새 버전을 생성한다.
(즉 동기화 한다.)
pull은 fetch를 한 뒤 merge한 것과 같다.
git pull <repository_URL> = git fetch <repository_URL> + git merge <repository_name> <repository_branch>
<repository_branch> 같은 경우 FETCH_HEAD라는 명령어로 대체할 수 있다.
이는 방금 fetch가 일어난 원격저장소의 브랜치를 기억하고 있는 명령어이다.
remote branch?
- 로컬 브랜치 : master는 내 로컬저장소의 master 브랜치를 가리킨다.
- 리모트 브랜치 : origin/master 는 origin 이라는 이름을 갖는 원격저장소의 master 브랜치를 가리킨다.
- 리모트 브랜치는 원격저장소를 클론해올 때 로컬저장소 에 생성된다.
표시는 아래와 같이 원격저장소이름/원격저장소브랜치 로 작명된다. ex) origin/master