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 maingit fetch upstreambaixa as novidades do original, sem mexer nos seus arquivos.git switch mainvolta para a main. A documentação usagit checkout main; desde o Git 2.23,git switchfaz o mesmo para trocar de branch.git merge upstream/mainjunta as novidades na sua main local.git push origin mainenvia 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. Rodegit 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 comgit 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. Rodegit fetch origin, junte comgit 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.
Continue pelos guias
Os geradores, o passo a passo e os guias ficam a um clique.
- Resolver conflito de mergeComo ler as marcas <<<<<<<, ======= e >>>>>>> e concluir o merge na linha de comando.
- Fazer o forkO que é o fork, como criar, clonar e ligar o projeto original com o nome upstream.
- Abrir o pull requestCompare & pull request, base e fork de origem, rascunho e como fechar uma issue pela descrição.