기능
- 원격 리포지토리의 변경사항을 로컬 리포지토리에 업데이트한다.
- 로컬 리포지토리의 파일이나 커밋을 변경시키지는 않고, 메타데이터 업데이트와 같은 기능
예시
git fetch # 현재 사용 중인 기본 리모트(origin)에서 데이터를 가져온다.
git fetch origin # 명시적으로 origin에 연결되어 있는 원격 리포지토리의 데이터를 가져온다.
git fetch -all # 모든 리모트로부터 데이터를 가져온다. 리모트가 origin만 존재한다면 위와 같은 동작 수행
git fetch origin dev # origin의 원격 dev 브랜치 정보만 업데이트한다.
주의사항
- Fetch RefSpec(
git config --local --get remote.origin.fetch
)의 영향을 받는다.
- 만약
+refs/heads/dev:refs/remotes/origin/dev
이렇게 단일 브랜치가 연결되거나 올바르지 않은 값이 들어있다면, 예상과 다른 동작을 하거나 에러가 발생할 수 있다.
<1> 오동작 예시
git log ..@{u}
등으로 원격에만 존재하는 커밋을 확인하려 할 때, 아래와 같은 에러가 발생한다.
fatal: upstream branch 'refs/heads/dev' not stored as a remote-tracking branch
git branch -a
를 했을 때 모든 브랜치 정보가 나오지 않는다.
<2> Fetch RefSpec 확인 및 수정
# RefSpec 확인
git config --local --get remote.origin.fetch
# 정상 출력:
+refs/heads/*:refs/remotes/origin/*
# 비정상 출력:
# - 원인: git clone 시 --single-branch, --branch {브랜치} 등으로 제한한 경우
+refs/heads/dev:refs/remotes/origin/dev