git fetch

Compartilhar e atualizar

Baixar objetos e refs de outro repositório


O comando 'git fetch' baixa commits, arquivos e refs de um repositório remoto para o seu repositório local. Ele permite ver no que os outros trabalharam sem mesclar essas mudanças nas suas branches locais. Ao contrário do 'git pull', o fetch é seguro - nunca muda o seu diretório de trabalho nem a branch atual. Depois do fetch, você pode revisar as mudanças e decidir se quer mesclá-las.

Sinopse

git fetch [<options>] [<repository> [<refspec>...]]
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)...]
git fetch --all [<options>]
[ ] opcional| ou<arg> valor a substituir... repetível--flag opção

Opções

Clique em uma opção para expandir

Iniciante (4)

Fazer fetch de todos os remotos configurados de uma vez. Útil quando você tem vários remotos, como origin e upstream.

Quando necessárioÚtil com vários remotos (fork + upstream); um fetch simples cobre só um

Exemplo

git fetch --all

Antes do fetch, remover as branches de rastreamento remoto que não existem mais no remoto. Mantém o repositório limpo.

RecomendadoRemove refs origin/* desatualizadas de branches excluídas no remoto

Exemplo

git fetch --prune

Buscar todas as tags do remoto, além de tudo o que seria buscado. Útil para pegar as tags de release.

Quando necessárioTags em commits buscados já chegam; use para tags em outro histórico

Exemplo

git fetch --tags

Mostrar o que seria feito, sem fazer nenhuma mudança. Útil para pré-visualizar o que o fetch vai baixar.

Quando necessárioPré-visualiza quais refs seriam atualizadas sem mudar nada

Exemplo

git fetch --dry-run

Intermediário (1)

Limitar o fetch ao número de commits indicado a partir da ponta de cada branch remota. Em um clone raso, isso aprofunda ou encurta o histórico.

Quando necessárioEconomiza tempo em CI ou em repositórios enormes, mas o histórico raso limita log e merge-base

Exemplo

git fetch --depth=1

Escolhendo a opção certa

Fetch ou pull

Entender a diferença principal entre fetch e pull

ComandoBaixa commitsAtualiza a branch localSeguro a qualquer hora
git fetchSimNão - só o rastreamento remotoSim - nunca muda o diretório de trabalho
git pullSimSim - mescla na atualCuidado - pode causar conflitos
git pull --rebaseSimSim - faz rebase da atualCuidado - reescreve commits locais

Opções de fetch para limpeza

Opções para manter o repositório arrumado

ComandoRemove branches obsoletasBusca tagsCaso de uso
git fetchNoAlgumas (alcançáveis)Atualização padrão
git fetch --pruneSimAlgumas (alcançáveis)Limpar branches excluídas
git fetch --tagsNoTodas as tagsPegar as tags de release
git fetch --prune --tagsSimTodas as tagsLimpar branches + pegar todas as tags (tags só locais são mantidas)

Alcance do fetch

Controlar o que é baixado

ComandoBusca deIdeal para
git fetchRemoto padrão (origin)Uso mais comum
git fetch originRemoto específicoQuando você tem vários remotos
git fetch --allTodos os remotosSincronizar um fork com o upstream
git fetch origin mainSó uma branchDownload mínimo

Exemplos

Fetch do remoto padrão

git fetch

Baixa os commits novos do remoto padrão (normalmente 'origin') sem mesclar.


Fetch de um remoto específico

git fetch origin

Fazer fetch explicitamente do remoto 'origin'.


Fetch de todos os remotos

git fetch --all

Fazer fetch de todos os remotos configurados de uma vez.


Fetch e poda de branches obsoletas

git fetch --prune

Fazer fetch e remover as branches de rastreamento remoto que não existem mais no remoto.

Exemplos de fluxos de trabalho

1
git fetch origin

Baixar as mudanças remotas sem mesclar

2
git log main..origin/main

Ver commits do remoto que não estão na sua branch local

3
git diff main...origin/main

Revisar as mudanças de código feitas no remoto

4
git merge origin/main

Mesclar quando estiver pronto

1
git remote add upstream <original-repo-url>

Adicionar o repositório original como upstream (uma vez)

2
git fetch upstream

Pegar o mais recente do repositório original

3
git checkout main

Trocar para a sua branch main

4
git merge upstream/main

Mesclar as mudanças do upstream no seu fork

5
git push origin main

Enviar o fork atualizado para o seu GitHub

1
git fetch --prune

Fazer fetch e remover branches de rastreamento remoto obsoletas

2
git branch -vv

Ver as branches locais e o status de rastreamento delas

3
git branch -d old-feature

Excluir branches locais que rastreavam remotas excluídas

Solução de problemas

fatal: 'origin' does not appear to be a git repository

Causa: Nenhum remoto chamado 'origin' está configurado

Confira os remotos com 'git remote -v'. Adicione um com 'git remote add origin <url>'

Fiz fetch, mas a minha branch local não atualizou

Causa: O fetch só atualiza as branches de rastreamento remoto, não as branches locais

Isso é esperado! Rode 'git merge origin/main' ou 'git pull' para atualizar a branch local

error: cannot lock ref - unable to update local ref

Causa: Uma ref de rastreamento remoto obsoleta conflita com um nome de branch novo (por ex. 'feature' e 'feature/login')

Rode 'git remote prune origin' ou 'git fetch --prune' para remover as refs obsoletas e faça fetch de novo

Branches remotas excluídas continuam aparecendo

Causa: É preciso podar as branches de rastreamento remoto obsoletas

Use 'git fetch --prune' ou 'git remote prune origin'

O fetch está muito lento ou baixa demais

Causa: Você está baixando o histórico inteiro quando só precisa dos commits recentes

Use 'git fetch --depth=1' para um fetch raso, ou busque só uma branch específica

Dicas e armadilhas

Boas práticas

  • ✓Faça fetch antes de começar a trabalhar para ver se há mudanças remotas que você precisa conhecer
  • ✓Use --prune com frequência para manter o repositório livre de branches obsoletas
  • ✓Prefira fetch + merge a pull quando quiser revisar as mudanças antes de integrá-las
  • ✓Configure 'git config fetch.prune true' para sempre podar no fetch
  • ✓Use 'git fetch --all' ao trabalhar com forks para sincronizar origin e upstream de uma vez

Erros comuns

  • ✗Esperar que o fetch atualize o seu diretório de trabalho - ele só atualiza as branches de rastreamento remoto, não as suas branches locais.
  • ✗Esquecer de fazer merge ou rebase depois do fetch - o fetch baixa, mas não integra as mudanças.
  • ✗Não usar --prune com frequência, deixando branches de rastreamento remoto obsoletas bagunçando o repositório.
  • ✗Confundir fetch com pull - pull = fetch + merge, enquanto o fetch é só a etapa de download.

Perguntas frequentes

A:

O fetch baixa commits, mas não muda as suas branches locais. Pull = fetch + merge (ou rebase). O fetch é mais seguro porque deixa você revisar as mudanças antes de integrá-las.

A:

O fetch só atualiza as branches de rastreamento remoto (como origin/main), não as suas branches locais. Você precisa de merge ou rebase para atualizar a branch local.

A:

Use 'git log main..origin/main' para ver commits do remoto que não estão na sua branch local, ou 'git diff main...origin/main' para ver as mudanças de código feitas no remoto.

A:

Fetch quando quiser revisar as mudanças antes ou quando trabalhar em branches importantes. Pull para atualizações rápidas quando você confia nas mudanças que chegam.

A:

Use 'git fetch origin branch-name' para buscar só essa branch. Útil em repositórios grandes em que você não precisa de tudo.

A:

Ele remove as branches de rastreamento remoto que não existem mais no remoto. Mantém o repositório limpo quando colegas excluem branches mescladas.