본문 바로가기

개발자/Programming

[git] Fetch에 대해 정리하자(+pull과의 차이)

반응형

git fetch

원격저장소에 있는 변경사항들을 로컬저장소에 가져오기 전에 변경내용을 확인하고 싶은경우에 사용하는 명령어 입니다.
만약 제가 작업한 파일을 github에 올리고 퇴근을 했어요.
근데 다음날 누군가 제 파일에 수정을 했는지 안했는지 확인하고 싶을때!
로컬디렉토리로 변경한 내용을 가져오지 않고 변경한 내역들만 확인하는거죠.
그 명령어가 fetch 입니다.

 

Git Fetch vs Git Pull Graph로 이해하기

pull 을 실행하면, 원격 저장소의 내용을 가져와 자동으로 병합 작업을 실행하게 됩니다.

그러나 단순히 원격 저장소의 내용을 확인만 하고 로컬 데이터와 병합은 하고 싶지 않은 경우에는 fetch 명령어를 사용할 수 있습니다.

fetch 를 실행하면, 원격 저장소의 최신 이력을 확인할 수 있습니다.

이 때 가져온 최신 커밋 이력은 이름 없는 브랜치로 로컬에 가져오게 됩니다. 이 브랜치는 'FETCH_HEAD'의 이름으로 체크아웃 할 수도 있습니다.

예를 들어, 로컬 저장소와 원격 저장소에 B에서 진행된 커밋이 있는 상태에서 fetch 를 수행하면 아래 그림과 같이 이력이 남겨집니다.

이 상태에서 원격 저장소의 내용을 로컬 저장소의 'master'에 통합하고 싶은 경우에는, 'FETCH_HEAD' 브랜치를 merge 하거나 다시 pull 을 실행하면 됩니다.

이렇게 fetch 후 merge 를 수행하면, pull 명령을 실행했을 때와 같은 이력이 만들어집니다. 사실 pull 이라는 것은 내부적으로 보면 fetch + merge 이기 때문이죠!

 

git fetch vs git pull

둘다 결국 원격저장소의 내용을 가져오는데 사용됩니다.
fetch는 가져온 변경내용을 로컬에 영향을 미치지 않으며, 병합하기전에 확인하는 용도로 사용하는 것이 좋습니다.
pull은 가져온 변경내용을 로컬에 병합합니다. 하지만 로컬에서 작업하다가 변경된 내용을 pull할 경우 충돌이 일어날 수 있습니다.
왠만해선 fetch후 pull을 로컬이 깨끗한 상태에서 사용하는게 좋습니다. fetch와 pull을 적절하게 사용합시다.

반응형