Original article: Git Fetch vs Pull: What's the Difference Between the Git Fetch and Git Pull Commands?

Git pull과 fetch는 Git 사용자가 자주 사용하는 명령어입니다. 이 기사에서는 두 명령어의 차이점을 알아봅니다.

본격적인 이야기에 앞서 '클론'이란 무엇일까요? 클론 저장소(clone repository)는 원격 저장소를 복제한 저장소입니다. 이는 다른 사람의 소스 코드 복사본을 생성하는 것과 같으며, 개발을 할 때 보통 우리는 클론 저장소에서 작업을 진행하게 됩니다.

이러한 상황에서 만일 원격 저장소에 변경 사항이 생겼다면, 그 내용을 가져와 클론 저장소를 최신 상태로 유지해주어야 합니다.

바로 여기서 fetchpull이 등장합니다.

git fetch는 로컬 Git에게 원격 저장소에서 최신 메타데이터 정보를 확인하라는 명령을 전달합니다. 단 fetch는 원격 저장소에 변경사항이 있는지 확인만 하고, 변경된 데이터를 로컬 Git에 실제로 가져오지는 않습니다.

반면 git pull은 원격 저장소에서 변경된 메타데이터 정보를 확인할 뿐만 아니라 최신 데이터를 복사하여 로컬 Git에 가져옵니다.

다음은 pull 명령을 사용하는 예시 문법입니다.

git pull origin ankur bugfix

여기서 유념할 점은 보통 작업 중인 워크스테이션에 최소 세 개 이상의 프로젝트 복사본이 존재한다는 것입니다.

  1. 사용자의 커밋 기록이 있는 사용자의 저장소 (즉, 이미 저장이 된 저장소)
  2. 편집 및 작성 중이지만 사용자 저장소에 아직 커밋되지 않은 복사본
  3. 원격 저장소의 로컬에 "캐시된 (cached)" 복사본 (복제된 원본일 가능성이 높습니다)

git fetch를 사용하면 마지막 pull 이후 원격 저장소 또는 브랜치에 적용된 변경 사항을 확인할 수 있습니다. 만일 원격 저장소에 변경 사항이 존재하는 상황에서 pull을 바로 실행하면 현재 브랜치와 작업 복사본의 파일이 변경되는 동시에 새로 작업한 내용이 손실되는 일이 생길 수 있습니다. 따라서 fetch로 변경 사항을 먼저 확인한 후 pull을 실행하는 방법이 보다 안전합니다.

git fetch    
git diff ...origin