Dev/VCS

git pull vs git fetch

dragonhyeon 2024. 12. 13. 01:22
728x90
반응형

git pull vs git fetch

원격 저장소의 브랜치를 로컬에 적용하기 위해 git pull 혹은 git fetch 를 사용할 수 있습니다.

git pull

  • 원격 저장소에서 변경 사항을 가져오고, 자동으로 현재 로컬 브랜치에 병합합니다.
  • 내부적으로 git fetch + git merge 를 한 번에 수행합니다.
예를들어 develop 브랜치에서 git pull origin main 을 실행할 경우 develop 브랜치에 origin/main 브랜치를 병합하게 됩니다.
git pull 을 통해 병합 커밋이 생성 될 경우 자동으로 Merge branch 'main' of <repository-url> into main 와 같은 커밋 메시지가 생성되며 자동으로 실행되는 커밋 메시지 수정창에서 커밋 메시지 수정 또한 원한다면 할 수 있습니다.

 

사용 예시는 아래와 같습니다.

git pull origin main  # 작업중인 로컬 브랜치에 원격 저장소의 main 브랜치를 병합

 

git pull 은 git fetch 와 git merge 를 한 번에 수행하는 명령으로, 원격 브랜치에서 변경 사항을 가져오고 즉시 병합을 시도합니다. 병합 충돌이 발생하면 즉시 충돌을 해결해야 하며, 충돌을 해결하지 않으면 Git 에서 다른 작업을 진행할 수 없습니다. 특히 자동으로 병합을 수행하므로, 병합 방식 (merge vs rebase) 을 선택할 수 없습니다.

git fetch

  • 로컬에 저장된 원격 추적 브랜치를 원격 브랜치의 최신 상태로 업데이트하는 명령어입니다.
  • 가져온 변경 사항이 로컬 작업 브랜치에 병합되지는 않습니다.
  • 원격 추적 브랜치는 단순히 원격 저장소의 상태를 로컬에서 참조하기 위한 목적입니다.
  • 가져온 원격 추적 브랜치는 읽기 전용이므로 로컬에서 작업이 불가능하며 작업하려면 원격 추적 브랜치를 기준으로 로컬 브랜치를 만들어야 합니다.
원격 추적 브랜치를 기준으로 작업을 진행하기를 원한다면 예를들어 git switch -c some-branch origin/develop 과 같이 origin/develop 브랜치를 기준으로 some-branch 브랜치를 생성하여 작업을 진행합니다.

 

사용 예시는 아래와 같습니다.

git fetch origin main  # 원격 저장소의 main 브랜치의 변경 사항이 로컬의 origin/main 브랜치로 반영
git merge origin/main  # 작업중인 로컬 브랜치에 origin/main 브랜치를 병합

 

git fetch 는 원격 저장소에서 변경 사항만 가져오고, 병합은 나중에 할 수 있도록 해줍니다. 이 방식은 병합을 미루고 다른 일을 하다가 나중에 병합을 할 수 있게 해줍니다. git fetch 후 병합을 하게 되면 병합 실행 전까지 충돌을 확인하거나 병합 전략을 미리 생각할 시간을 가질 수 있습니다.

728x90
반응형