Pular para o conteúdo

Como atualizar um fork no GitHub com o upstream

O fork não acompanha o original sozinho. Sincronize antes de cada nova contribuição para evitar conflitos.

Como atualizar o meu fork com o projeto original?

Com o upstream configurado, rode git fetch upstream, git switch main, git merge upstream/main e git push origin main. Também dá para usar o botão Sync fork do GitHub ou o comando gh repo sync.

Por que o fork fica para trás

Quando você faz um fork, recebe uma foto do projeto naquele dia. O original continua recebendo commits de outras pessoas, e o seu fork não os recebe sozinho. Se você começar uma branch nova em cima de uma main antiga, o pull request pode nascer com conflitos ou repetir trabalho que já foi feito. Por isso o hábito é sincronizar antes de cada nova contribuição.

A documentação do GitHub descreve três jeitos de sincronizar: pelo botão no site, pelo GitHub CLI e pela linha de comando com Git.

Pelo site: botão Sync fork

Na página principal do seu fork, acima da lista de arquivos, abra o menu Sync fork, confira as novidades do original e clique em Update branch. Se houver conflito, o GitHub propõe criar um pull request para resolvê-lo. Esse botão atualiza o fork no GitHub; o seu computador continua como estava até você baixar a novidade com git pull.

Pelo GitHub CLI

O comando é gh repo sync com o seu fork e a branch, por exemplo gh repo sync maria-dev/listaki -b main. A documentação avisa que a opção --force sobrescreve a branch de destino quando há conflito, então só a use se tiver certeza de que não perde nada seu.

Pela linha de comando: fetch e merge

Com o upstream configurado (veja o guia de como fazer o fork), a documentação mostra três comandos. Eles foram executados aqui, em dois repositórios locais de exemplo:

git fetch upstream
git switch main
git merge upstream/main
git push origin main
  • git fetch upstream baixa as novidades do original, sem mexer nos seus arquivos.
  • git switch main volta para a main. A documentação usa git checkout main; desde o Git 2.23, git switch faz o mesmo para trocar de branch.
  • git merge upstream/main junta as novidades na sua main local.
  • git push origin main envia a main atualizada para o seu fork. A página do GitHub lembra que o merge só atualiza a cópia local: para atualizar o fork no site, é preciso enviar.

Três erros que aparecem nesse caminho

  • fatal: 'upstream' does not appear to be a git repository: você não registrou o original. Rode git remote add upstream <endereço do original>.
  • error: Your local changes to the following files would be overwritten by merge:: há alterações suas, não guardadas, em arquivos que o merge também muda. Guarde-as num commit (ou com git stash) e repita.
  • ! [rejected] main -> main (fetch first): o fork recebeu commits que a sua main local não tem, por exemplo pelo botão Sync fork. Rode git fetch origin, junte com git merge origin/main, confira e envie de novo.

Exemplo resolvido: antes da segunda contribuição

Maria teve o primeiro pull request aceito. Duas semanas depois quer corrigir outro detalhe. Antes de criar a branch, ela roda git switch main, git fetch upstream, git merge upstream/main e git push origin main. O Git responde Fast-forward: sem conflito, a main dela passa a ser igual à do original. Só então ela cria a branch com git switch -c corrige-exemplo.

Se o merge não fosse um avanço simples, o Git abriria um conflito; o guia de como resolver um conflito de merge mostra o que fazer.

Perguntas frequentes

Por que o merge não atualiza o meu fork no GitHub?

O git merge só atualiza a sua cópia local, como a documentação do GitHub avisa. Para o fork no site ficar igual, é preciso enviar a main atualizada com git push origin main.

O que é o upstream?

É o apelido que você dá ao repositório original ao registrá-lo com git remote add upstream. O origin é o seu fork; o upstream é o projeto de onde ele veio. Com os dois configurados, você busca novidades de um e envia para o outro.

Posso usar git pull em vez de fetch e merge?

O git pull faz o fetch e o merge de uma vez, mas da branch que está acompanhada, que no seu fork costuma ser o origin. Para buscar do original, a documentação do GitHub usa git fetch upstream seguido de git merge upstream/main, e este guia segue o mesmo caminho.

E se o merge der conflito?

O Git para e marca os arquivos em conflito. Você abre cada um, escolhe o que fica, apaga as marcas, faz git add e conclui com git commit. O guia de como resolver um conflito de merge mostra o passo a passo com um exemplo.

Fontes deste guia

Abertas em 11/10/2026. O texto é nosso, em português; as fontes ficam aqui com link, licença e o que foi lido.

  • Syncing a fork (GitHub Docs)
    A página não mostra data · aberta em · reconferência: confirmada na abertura (11/10/2026) · licença do conteúdo: CC BY 4.0 (conteúdo); MIT (código)
    O que lemos: O botão Sync fork, o comando gh repo sync e, na linha de comando, git fetch upstream, git checkout main e git merge upstream/main; avisa que isso só atualiza a cópia local e que é preciso enviar com push.
    Como usamos: Texto próprio em português; os fatos e os comandos vêm da página, sem copiar trechos. Link e data em cada uso.
  • Fork a repository (GitHub Docs)
    A página não mostra data · aberta em · reconferência: confirmada na abertura (11/10/2026) · licença do conteúdo: CC BY 4.0 (conteúdo); MIT (código)
    O que lemos: O que é um fork ("propor mudanças sem afetar o repositório original"), o botão Fork, o comando gh repo fork, clonar o fork, git remote add upstream e git remote -v, e os avisos sobre repositórios privados.
    Como usamos: Texto próprio em português; os fatos e os comandos vêm da página, sem copiar trechos. Link e data em cada uso.

Informação geral, não é aconselhamento jurídico. Quando um guia cita uma licença de conteúdo, ela vale para a página citada, não para este site.