[Git] pull과 fetch의 차이점
pull과 fetch의 차이점
pull과 fetch의 가장 큰 차이점은 병합 (merge) 여부이다.
pull은 원격 repository에서 변경 사항을 로컬 repository로 내려받아 병합을 진행한다.
fetch는 원격 repository에서의 변경 사항을 로컬 repository의 임시 branch로 내려받고, 병합을 진행하지 않는다.
원격 repository의 master branch의 커밋 내역은 A, B, C, D이고
로컬 repository의 master branch의 커밋 내역은 A, B, X, Y라고 가정해보자.
이 상황에서 로컬 master에서 git fetch 명령어를 통해 임시 브랜치로 원격 master의 커밋 내역을 내려받으면, 다음과 같아진다.
이 때 로컬에서는 FETCH_HEAD 라는 이름의 브랜치에 원격 master의 커밋 내역이 내려받아진다.
(엄밀히 말 하자면 FETCH_HEAD는 브랜치 이름이 아니라, 임시 브랜치를 가리키는 포인터이다. 그러나 통상적으로는 FETCH_HEAD 브랜치라고 부른다.)
로컬에서는 FETCH_HEAD로 checkout을 통해 브랜치 이동이 가능하다.
이 상태에서 원격 브랜치의 내용을 로컬 브랜치에 내려받고 싶다면, 내려받고자 하는 로컬의 브랜치에 가서 merge를 통해 FETCH_HEAD 브랜치의 내용, 즉 원격 master 브랜치의 커밋 내역을 내려받을 수 있다.
병합 결과 로컬 저장소 커밋 Y 뒤에 E가 생긴 것을 알 수 있다.
그렇다면 fetch와 pull은 각각 언제 사용해야 할까?
pull: 원격 repository가 local repository에 비해 최신 commit이 존재하는 경우 사용한다.
fetch: 원격 repository와 local repository의 변경 사항이 다를 때 비교 및 대조 작업이 필요한 경우 사용한다. 비교 후 merge를 통해 최신 commit을 반영하거나 충돌을 해결할 수 있다.
참고 자료
https://velog.io/@msung99/push-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EA%B9%83%ED%94%8C%EB%A1%9C%EC%9A%B0-pull
[Git] fetch 와 Pull 의 차이점은?
이번 포스팅에서는 원격 저장소에서 커밋들을 로컬 저장소로 내려받을 때 사용하는 pull 과 fetch 명령의 차이점을 알아보겠습니다.
velog.io