[Git 명령어] git fetch와 git pull에 대해 알아보자
Git fetch 완전 정복 – git pull과의 차이까지
이 글은 GitHub를 사용하기 시작한 초보자가 git fetch를 정확히 이해하고, git pull과의 차이를 명확히 구분할 수 있도록 설명하는 가이드입니다.
1. git fetch란 무엇인가?
한 줄로 말하면 “원격 저장소(GitHub 등)의 최신 정보만 가져오는 명령”입니다. 여기서 중요한 점은, 내 로컬 브랜치의 코드 내용은 전혀 바꾸지 않는다는 것입니다.
git fetch가 하는 일은 대략 다음과 같습니다.
- 원격 저장소에 새로 생긴 커밋, 브랜치, 태그 정보를 로컬로 가져옴
- 하지만 현재 작업 중인 브랜치의 파일들은 그대로 둠
- 따라서 “변경 내역을 확인”하는 용도로 매우 적합함
git fetch는 “일단 최신 상황부터 보고 싶을 때” 쓰는 안전한 명령입니다. 코드를 건드리지 않기 때문에 언제 실행해도 부담이 거의 없습니다.2. git fetch vs git pull – 무엇이 다를까?
git fetch와 git pull은 둘 다 “원격에서 뭔가를 가져오는 명령”이지만, 실제로 하는 작업은 꽤 다릅니다.
git fetch
- 원격 저장소의 최신 커밋과 브랜치 정보를 로컬로 가져오기만 함
- 현재 작업 중인 브랜치의 코드는 그대로 유지
- “변경 사항을 먼저 보고 싶을 때” 사용하기 적합
git pull
- 내부적으로
git fetch+git merge를 한 번에 수행하는 것과 비슷 - 원격 변경 사항을 가져온 뒤, 현재 브랜치에 바로 반영
- 내 작업과 바로 섞이기 때문에 충돌(conflict)이 날 수도 있음
| 명령 | 하는 일 |
|---|---|
git fetch |
원격의 최신 정보만 가져옴. 코드 내용은 그대로 |
git pull |
fetch 후 곧바로 현재 브랜치에 merge/rebase 시도 |
3. git fetch 기본 사용법
1) 가장 기본적인 형태
git fetch
기본 원격(remote), 보통 이름이 origin인 저장소에서 최신 정보를 가져옵니다.
2) 원격 이름을 명시해서 사용
git fetch origin
대부분의 경우 origin은 GitHub에 있는 원격 저장소를 의미합니다.
3) 모든 원격 저장소 정보 가져오기
git fetch --all
여러 원격(remote)을 등록해 사용하는 경우, 이 명령으로 모든 원격의 정보를 최신으로 맞출 수 있습니다.
4. git fetch 후에 실제로 무슨 일이 일어나나?
예를 들어, 팀원이 GitHub의 main 브랜치에 여러 개의 커밋을 푸시했다고 가정해 봅시다. 로컬에서는 아직 이 커밋들을 모르는 상태입니다.
이때 다음 명령을 실행하면:
git fetch origin
- 로컬의
origin/main브랜치(원격 추적 브랜치)가 최신 상태로 업데이트됩니다. - 하지만 내 로컬
main브랜치는 변경되지 않습니다.
결과적으로 다음처럼 상태를 나누어 볼 수 있게 됩니다.
main– 내가 작업 중인 로컬 브랜치origin/main– GitHub에 있는 최신 상태를 가리키는 브랜치
이 둘을 비교해보면 “내 코드와 GitHub의 코드가 얼마나 다른지”를 알 수 있습니다.
git log HEAD..origin/main
git diff HEAD origin/main
5. git fetch 이후 자주 하는 작업들
1) 상태 확인 (로그/차이 보기)
git fetch origin
# 내 현재 브랜치(HEAD) 이후에 origin/main에만 있는 커밋 로그 보기
git log HEAD..origin/main
# 내 현재 코드와 origin/main의 코드 차이 비교
git diff HEAD origin/main
이 과정을 통해:
- 새로 추가된 기능이 어떤 것인지
- 내 코드와 충돌 날 만한 부분이 있는지
- 정말로 지금 merge해도 괜찮을지
를 미리 확인할 수 있습니다.
2) 직접 merge 하기
git merge origin/main
이렇게 하면 git pull origin main과 비슷하지만, fetch → 확인 → merge 흐름을 통해 더 통제된 방식으로 작업할 수 있습니다.
6. 언제 git fetch를 쓰면 좋을까?
📌 1) 팀원들의 변경 내역을 먼저 확인하고 싶을 때
바로 내 코드에 섞기 전에, “다른 사람들이 무슨 작업을 했는지” 먼저 보고 싶을 때 유용합니다.
git fetch origin
git log HEAD..origin/main
git diff HEAD origin/main
📌 2) 자동 merge가 무서울 때
git pull을 쓰면 바로 merge를 시도하기 때문에, 작업 중인 변경과 섞여 충돌이 날 수도 있습니다.
반면 git fetch는 내 코드에는 손대지 않고, “변경 상황만 업데이트”하는 명령이기 때문에 언제 실행해도 안전합니다.
📌 3) 여러 브랜치 상황을 파악하고 싶을 때
git fetch --all
git branch -r
원격 브랜치 목록을 확인한 후, 필요하면 git checkout origin/브랜치명으로 확인용 체크아웃을 하거나 새 브랜치를 만들어 이어서 작업할 수 있습니다.
7. 자주 사용하는 git fetch 패턴 정리
기본 패턴
# origin에서 최신 정보 가져오기
git fetch origin
# 상태 확인 후, 필요할 때 merge
git log HEAD..origin/main
git diff HEAD origin/main
git merge origin/main
모든 원격의 정보 가져오기
git fetch --all
특정 브랜치만 가져오고 싶을 때 (참고)
git fetch origin main
대부분의 상황에서는 단순히 git fetch 또는 git fetch origin만으로도 충분합니다.
8. 한눈에 요약
| 개념 | 설명 |
|---|---|
git fetch |
원격 저장소의 최신 정보만 가져옴. 로컬 코드는 그대로 유지. |
git pull |
fetch + merge를 한 번에 수행. 변경 사항을 현재 브랜치에 바로 반영. |
| 추천 사용 시점 | 먼저 상황을 보고 싶을 때, 안전하게 상태만 업데이트하고 싶을 때. |
git pull을 무조건 쓰기보다는, git fetch로 먼저 상황을 체크해 본 뒤 merge/rebase 여부를 스스로 결정하는 습관을 들이면 충돌도 줄고, Git이 훨씬 덜 스트레스가 됩니다.