Git : fetch vs pull

impmonzz·2025년 1월 7일

Git 프로젝트에서 원격 저장소와 로컬 저장소 간의 변경 사항을 동기화하는 작업은 매우 중요합니다. 이를 위해 git fetchgit pull이라는 두 가지 주요 명령어를 사용할 수 있습니다.

이 글에서는 두 명령어의 작동 방식과 차이점을 살펴보고, 실제로 사용할 때 주의해야 할 점을 설명합니다.

Git 공식 매뉴얼에 따르면, git fetch는 "원격 저장소의 변경 사항을 가져오되, 로컬 브랜치에는 적용하지 않는다"고 설명하며, git pull은 "원격 저장소의 변경 사항을 가져오고, 로컬 브랜치와 병합한다"고 정의합니다. 즉, fetch는 변경 사항을 조회만 하고, pull은 변경 사항을 즉시 적용한다는 점에서 차이가 있습니다.

Git Fetch

git fetch는 원격 저장소의 변경 사항을 가져와 로컬 저장소에 업데이트하지만, 현재 작업 중인 브랜치에는 아무런 영향을 주지 않는 명령어입니다.

특징

  • 원격 브랜치 상태를 로컬로 동기화하지만, 현재 브랜치와 병합하지 않음.
  • 이후 변경 사항을 검토하거나 병합 여부를 결정할 수 있음.

사용 방법

git fetch origin

사용 사례
1. 변경 사항 검토

  • 병합 전에 원격 저장소의 변경 사항을 확인하려고 할 때 유용합니다.
git fetch
git diff origin/main

위 명령어를 통해, 원격 브랜치(origin/main)와 로컬 브랜치의 차이점을 확인할 수 있습니다.

2. 충돌 사전 검토

  • 팀 프로젝트에서 병합 전에 충돌 가능성을 미리 확인하려는 경우, git fetch를 사용하여 원격 변경 사항을 가져온 뒤 차이점을 검토할 수 있습니다.

3. 원격 브랜치 상태 동기화

  • 원격 브랜치가 추가되거나 삭제된 경우, git fetch로 로컬 저장소를 업데이트합니다.

Git Pull

git pullgit fetchgit merge를 결합한 명령어로, 원격 저장소의 변경 사항을 가져오고 이를 로컬 브랜치에 병합합니다.

특징

  • 원격 저장소와 로컬 브랜치를 즉시 동기화.
  • 병합 과정에서 충돌이 발생하면 바로 해결해야 함.

사용 방법

git pull origin main

사용 사례
1. 빠른 동기화

  • 로컬 브랜치를 원격 저장소와 빠르게 동기화하고 싶을 때 사용합니다.

2. 팀 프로젝트

  • 팀원이 작업한 최신 변경 사항을 바로 병합하여 작업을 이어나가야 할 때 사용합니다.
git pull origin feature-branch

사용 시 고려해야 할 점

git fetchgit pull을 선택할 때는 프로젝트 상황과 작업 방식에 따라 신중히 결정해야 합니다.

충돌(Conflict) 문제
git fetch

  • 충돌이 발생하지 않습니다. 원격 변경 사항을 가져오기만 하기 때문에 병합 작업은 수동으로 진행됩니다.

git pull

  • 병합(Merge) 과정에서 충돌이 발생할 수 있으며, 이를 즉시 해결해야 작업을 이어갈 수 있습니다.

데이터 손실 위험

  • git fetch는 변경 사항을 조회만 하기 때문에 데이터 손실 우려가 없습니다.
  • git pull은 병합 후 충돌 해결 과정에서 로컬 변경 사항이 의도치 않게 덮어씌워질 수 있습니다.

결론
git fetchgit pull의 선택은 작업 상황에 따라 달라져야 합니다.

git fetch를 사용할 때

  • 변경 사항을 확인하고, 이후 병합 여부를 신중히 결정하고 싶을 때.
  • 충돌 가능성이 높은 상황에서 병합 전에 검토하고 싶을 때.

git pull을 사용할 때

  • 빠르게 원격 브랜치와 동기화하여 작업을 이어가야 할 때.
  • 로컬 브랜치에 원격 변경 사항을 즉시 적용하고 싶을 때.


3줄 요약

1.git fetch는 원격 변경 사항을 가져오기만 하고, 로컬 브랜치에는 적용하지 않는다.
2.git pull은 원격 변경 사항을 가져오고, 로컬 브랜치에 병합한다.
3.충돌 가능성을 줄이려면 fetch를 사용하고, 빠른 동기화가 필요하면 pull을 사용하자

참고

https://git-scm.com/docs/git-fetch
https://git-scm.com/docs/git-pull
https://www.freecodecamp.org/korean/news/git-fetch-vs-pull/
https://velog.io/@msung99/push-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EA%B9%83%ED%94%8C%EB%A1%9C%EC%9A%B0-pull
https://chaeyoung2.tistory.com/43

0개의 댓글