본문 바로가기
utils/git and github

[Git] pull and fetch

by ds31x 2024. 5. 26.

git pull

Remote repository 의 최신 commit 을 가져와
Local repository의 해당 branch에 병합.

  • 최신 commits 을 받아와 임시 영역에 저장: (이 과정을 fetch라고 함).
    (remote resository 를 위한 임시 branch 에 저장하여 stage 영역과 분리 관리).
  • 해당 임시 영역에 저장된 commits 를 현재의 branch 의 내용들과 검토하여 merge.
  • 해당 merge 는 "remote repository의 commits" 과 "local repository 의 commits" 를 하나로 합치는 것: pull 에서는 자동으로 수행함.
  • 자동으로 merge 가 안되는 경우, conflict 를 발생시키고 이는 사용자가 처리 해야함 (여러 사용자가 push등을 따로 한 경우 등등..)

명령어

다음의 명령어는 origin에서 main 브랜치를 가져와서 현재의 local 의 branch와 병합함.

git pull origin main
  • origin : remote respository 의 alias
  • main : 가져올 branch.

일반적으로는 git pull만 수행하여 현재 연결된 원격지의 브랜치의 commits를 현재 local의 브랜치로 병합.


git fetch

위에서 본 것처럼, pull은 자동으로 remote repository의 commits를 local의 브랜치와 merging을 시킴.

 

이와 달리, fetch는 우선 최신 commit을 remote repository를 위한 임시 branch에만 저장만 하고 자동으로 merge하지 않음.

  • fetch를 수행하면, 최신 commits 가 무엇인지는 알고 있으나,
  • 이를 local repository에 반영하지 않으며,
  • 이를 반영하기 위해서는 따로, merge 처리를 해야함.

local repository에 반영이 되지 않기 때문에, fetch 이후에 git log를 수행해도, 변화가 없음.

 

다음과 같은 장점 때문에 git fetch가 존재함.

  • git fetch는 원격 저장소의 변경 사항을 가져와 로컬 저장소에 업데이트하지만, 로컬 브랜치에는 병합하지 않는 명령어임.
  • 이는 원격 저장소의 최신 상태를 확인하고, 로컬 브랜치에 변경 사항을 병합하기 전에 검토할 수 있는 안전한 방법임.

참고로, git fetch --all을 수행하면
remote repository의 모든 branch를 가져옴.


명령어

git fetch는 일반적으로 git merge와 함께 수행됨: 이 둘을 합친게 git pull임.

# fetch 후 병합
git fetch origin master 
git merge origin/master
  • origin 원격 저장소에서 master 브랜치의 변경 사항을 가져옴
  • 가져온 변경사항(commits)들을 git merge로 local respoitory의 현재 브랜치에 병합

위의 명령어는 다음과 같음.

git pull origin master

같이 읽어보면 좋은 자료들

2024.05.20 - [utils/git and github] - [Git] Git Summary (작성중)

 

[Git] Git Summary (작성중)

git이란2024.05.20 - [utils/git and github] - Git : 소개 git 설치 후 해줘야 하는 작업들[Git] git 설치 후 우선 해줘야 하는 작업들 (tistory.com)local repository 초기화2024.05.20 - [utils/git and github] - [Git] init : local rep

ds31x.tistory.com