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
반응형

'Dev > VCS' 카테고리의 다른 글

Git 협업 방법 clone, fork  (2) 2024.12.17
Git 원격 브랜치, 원격 추적 브랜치, 트래킹 브랜치  (4) 2024.12.17
Git 스테이징 영역  (2) 2024.12.13
Git 브랜치 전략  (4) 2024.12.12
Conventional Commits  (1) 2024.12.10