
Passo 1 de 8
Escolher entre fetch, pull e push
Escolha a operação adequada para buscar novidades, integrá-las à branch local ou publicar seus commits.
Trilha de aprendizado · Nível 3 · Tutorial 4
Buscar mudanças do GitHub, integrá-las à branch local e publicar novos commits em um fluxo de merge, inclusive quando o remoto recebe alterações antes do envio.
Escolher entre fetch, pull e push
Escolha a operação adequada para buscar novidades, integrá-las à branch local ou publicar seus commits. 2 min
Buscar atualizações sem mudar os arquivos
Execute git fetch origin e entenda o que muda nas referências locais, sem alterar sua branch nem seus arquivos de trabalho. 3 min
Comparar a branch local com origin
Use o grafo e os contadores de acompanhamento para diagnosticar a relação entre os históricos após o fetch. 3 min
Integrar as mudanças depois do fetch
Integrar a referência remota na branch local correta e prever quando haverá avanço direto ou um commit de merge. 3 min
Usar pull com a estratégia de merge
Use pull com merge explícito e escolha quando separar a busca da integração para inspecionar as novidades. 3 min
Recuperar um push rejeitado
Planeje uma nova busca, a integração por merge e o reenvio após uma rejeição por histórico remoto atualizado. 4 min
Lidar com conflitos durante a sincronização
Resolva um conflito entre mudanças locais e remotas, preserve as duas intenções e reconheça quando o push pode ser retomado. 4 min
Aplicação final: sincronizar e conferir
Resolva uma rejeição de envio e comprove a sincronização pelo estado, pelo histórico atualizado e pelo conteúdo dos arquivos. 4 min

Passo 1 de 8
Escolha a operação adequada para buscar novidades, integrá-las à branch local ou publicar seus commits.
Traz informações e commits do remoto para o repositório local, mas não integra essas mudanças à branch atual. Seus arquivos de trabalho permanecem como estavam.
Busca atualizações do remoto e as integra à branch atual. Portanto, pode atualizar seus arquivos de trabalho. Neste tutorial, usaremos pull com a estratégia de merge.
Envia commits locais para atualizar uma branch no remoto. O sentido é o contrário: do seu repositório para o GitHub, não do GitHub para sua branch local.
Uma colega publicou mudanças no GitHub. Você quer obter os novos commits, mas deixar a integração para depois, mantendo sua branch atual e seus arquivos como estão. Qual operação escolher?
Exemplo
Você usa pull para trazer e integrar uma correção publicada pela equipe. Depois, faz uma melhoria e cria um commit local.
Para compartilhar esse novo commit no GitHub, a operação é push. Fazer outro pull não publica seu trabalho: ele atua na busca e na integração de mudanças do remoto.
Dica
Fetch, pull e push têm papéis complementares, mas não precisam ser executados sempre em sequência. Pull já inclui uma busca; fetch permite buscar sem integrar naquele momento.
Associe cada necessidade à operação correspondente.
Toque em um item e depois no par correspondente.

Passo 2 de 8
Execute git fetch origin e entenda o que muda nas referências locais, sem alterar sua branch nem seus arquivos de trabalho.
A referência de acompanhamento remoto origin/<nome-da-branch>, como origin/main, fica no seu repositório local. Ela representa o último estado conhecido daquela branch no remoto, não uma consulta em tempo real ao GitHub.
No terminal, dentro da pasta do projeto com origin configurado, execute:
git fetch originO comando busca novos commits em origin e atualiza as referências de acompanhamento remoto configuradas — não apenas a correspondente à branch atual.
Sua branch atual não se move, e os arquivos de trabalho permanecem iguais, inclusive suas edições ainda não commitadas.
Você executou git fetch origin. Depois, outra pessoa publicou um novo commit na main do GitHub. Sem nenhuma outra comunicação com o remoto, sua referência origin/main já aponta para esse novo commit.
Exemplo
Neste exemplo, a branch se chama main. Os commits são representados por A e B: B vem depois de A e altera o arquivo README.md.
Antes da busca:
main aponta para B.main e origin/main ainda apontam para A.Depois de git fetch origin:
origin/main passa a apontar para B.main continua apontando para A.README.md da pasta de trabalho continua como estava.As duas referências locais agora apontam para commits diferentes, sem que a busca tenha aplicado mudanças aos arquivos.
Você está na branch documentacao e tem uma edição ainda não commitada no README.md. O remoto recebeu novos commits nessa branch. Ao executar git fetch origin com sucesso, o que acontece?

Passo 3 de 8
Use o grafo e os contadores de acompanhamento para diagnosticar a relação entre os históricos após o fetch.
Após o git fetch origin, visualize o histórico com o comando abaixo. Nos exemplos, a branch é main: localize as etiquetas HEAD -> main e origin/main. No seu projeto, compare as referências com o nome real da branch.
git log --oneline --graph --all --decorateUm commit é exclusivo de um lado quando faz parte daquele histórico, mas não do outro.
origin/main tem commits exclusivos.Siga as conexões do grafo; não se baseie apenas na posição das linhas.
Cada grafo representa uma situação independente após o fetch. Associe cada um ao diagnóstico de main em relação a origin/main.
Toque em um item e depois no par correspondente.
Quando main tem origin/main como upstream, git branch -vv e git status podem mostrar a diferença entre os históricos. Esses contadores usam referências locais: interprete-os após o fetch, sem tratá-los como uma consulta em tempo real ao GitHub.
$ git branch -vv
* main 8a1b2c3 [origin/main: ahead 1, behind 2] Ajusta menu
$ git status --short --branch
## main...origin/main [ahead 1, behind 2]ahead 1: há 1 commit exclusivo de main.behind 2: há 2 commits exclusivos de origin/main.Como os dois lados têm commits exclusivos, os históricos estão divergentes. Os números contam commits, não arquivos.
Dica
Na saída curta de status, nenhuma linha de arquivo aparece abaixo do cabeçalho: não há alterações pendentes para commit. Mesmo assim, os históricos divergem. Limpeza da árvore de trabalho e alinhamento dos históricos são verificações diferentes.
Após um novo fetch, main acompanha origin/main. Você executa git status --short --branch e obtém somente esta linha:
## main...origin/main [ahead 2, behind 1]Considere tanto os arquivos de trabalho quanto os históricos.

Passo 4 de 8
Integrar a referência remota na branch local correta e prever quando haverá avanço direto ou um commit de merge.
Neste exemplo, vamos atualizar a branch local site, que já existe. No seu projeto, use o nome real da branch.
Execute os comandos abaixo um de cada vez. Confira o estado antes da troca e antes da integração. Se houver alterações pendentes, registre o trabalho na branch adequada antes de continuar.
git status
git switch site
git statusDepois de executar git fetch origin e inspecionar o histórico, integre com o comando abaixo. origin/site é a referência a integrar; quem recebe as mudanças é site, a branch atual. Não troque para origin/site.
git merge origin/siteVocê já fez fetch e inspecionou as novidades de origin/site, mas ainda está em main. Ordene os passos para integrá-las em site. Neste cenário, as duas conferências de estado indicarão trabalho limpo.
A relação entre os históricos determina o resultado. Nos exemplos abaixo, o avanço direto está habilitado e as mudanças são compatíveis.
Exemplo
No caminho A → B → C → D, site está em B e origin/site está em D.
git merge origin/site avança site até D e atualiza os arquivos. Não é necessário criar um commit de merge.
Exemplo
Após B, você criou L em site, enquanto outra pessoa criou R no remoto, agora representado por origin/site.
O mesmo comando combina as mudanças compatíveis em um commit de merge M. site passa a apontar para M, preservando L e R no histórico.
Dica
O merge altera o histórico e os arquivos locais, não o GitHub. Ele também não move origin/site. Se criou um commit de merge, esse commit ainda precisa ser publicado.
Após o fetch, você está em site, com trabalho limpo. Desde o último ancestral comum, site ganhou um commit exclusivo em menu.html e origin/site ganhou outro em rodape.html. As mudanças são compatíveis.
Qual será o resultado de git merge origin/site?

Passo 5 de 8
Use pull com merge explícito e escolha quando separar a busca da integração para inspecionar as novidades.
Com a branch de destino selecionada e a árvore de trabalho limpa, você pode encadear a busca e a integração. Neste exemplo, main acompanha origin/main.
O comando abaixo busca atualizações usando o upstream configurado e as integra por merge na branch atual. A opção --no-rebase explicita a estratégia de merge para esta execução.
git pull --no-rebaseDica
Pull não envia commits locais ao GitHub. Se houver commits locais a publicar, isso continua sendo tarefa do push.
Você quer buscar atualizações do upstream e integrá-las na branch atual. Preencha com a opção que explicita a estratégia de merge para esta execução:
git pull ____
Quer examinar as novidades antes de integrar? Use git fetch origin, inspecione o histórico e só então decida executar git merge origin/main, estando em main.
Quer buscar e integrar em sequência? Use git pull --no-rebase, com o upstream correto configurado. Ele não oferece uma pausa entre a busca e a integração para você examinar as novidades.
Aqui, main é o nome da branch do exemplo; no projeto, considere o nome real.
Dica
Se a branch local estiver apenas atrasada, o avanço direto continua possível com git pull --no-rebase. Essa opção escolhe a estratégia de integração, mas não obriga a criar um commit de merge.
Você está em main, que acompanha origin/main, com a árvore de trabalho limpa. Neste cenário, o remoto contém todos os commits locais e mais dois commits novos.
Você quer examinar esses commits antes de integrá-los. Qual plano atende a essa intenção e qual resultado o histórico permite?

Passo 6 de 8
Planeje uma nova busca, a integração por merge e o reenvio após uma rejeição por histórico remoto atualizado.
Você está na branch ajustes, com a árvore de trabalho limpa. Depois do último fetch, criou o commit local L. Nesse intervalo, uma colega publicou o commit R na mesma branch do GitHub. Seu envio é rejeitado:
$ git push origin ajustes
! [rejected] ajustes -> ajustes (fetch first)Esse é um caso de atualização não fast-forward: sua branch ainda não contém R. Atualizar o remoto diretamente para L deixaria R fora do histórico dessa branch. Seus commits locais continuam intactos.
Repetir o mesmo push não resolve. O caminho é buscar novamente → inspecionar → integrar por merge → conferir → reenviar.
Atenção
Este procedimento trata a rejeição por histórico remoto atualizado, não erros de autenticação ou permissão. Não use envio forçado: a recuperação deve preservar os commits dos dois lados.
Você confirmou que está em ajustes, sem alterações pendentes. As mudanças são compatíveis e não haverá conflitos. Ordene as ações para recuperar o push rejeitado, mantendo uma pausa para inspecionar o histórico.
No cenário anterior, L é seu commit local e R é o commit da colega. O merge sem conflitos cria M, unindo as duas linhas de histórico:
Representação simplificada, não uma saída de comando.
Após o fetch:
L (ajustes)
/
A---R (origin/ajustes)
Após o merge, antes do push:
L---M (ajustes)
/ /
A---R (origin/ajustes)Exemplo
M tem tanto L quanto R em sua ancestralidade. Se o remoto continuar em R, git push origin ajustes poderá avançar a branch remota até M sem descartar nenhum desses commits.
O merge foi local: ele preparou o histórico para o envio, mas não publicou M.
Após outra rejeição por histórico remoto atualizado, você executou git fetch origin. Está na branch documentacao, com a árvore de trabalho limpa, e o grafo mostra commits exclusivos em documentacao e em origin/documentacao.
Uma pessoa sugere repetir o push porque o fetch terminou. Sem conflitos e sem novas mudanças remotas, quais passos ainda faltam? Cite os comandos de integração e envio e explique por que o fetch sozinho não basta.
Escreva pelo menos 60 caracteres (0/60).

Passo 7 de 8
Resolva um conflito entre mudanças locais e remotas, preserve as duas intenções e reconheça quando o push pode ser retomado.
Na branch main deste exemplo, um push foi rejeitado. Você buscou as novidades, inspecionou o histórico e executou git merge origin/main. A integração parou neste trecho de README.md:
<<<<<<< HEAD
Encontro: sábado, às 10h.
=======
Encontro: sábado, com transmissão online.
>>>>>>> origin/mainDica
Aqui, HEAD identifica a versão da branch local atual. origin/main identifica a versão do histórico remoto buscado.
Um conflito também pode interromper git pull --no-rebase, pois ele faz a integração por merge após a busca.
No conflito anterior, a versão local acrescentou o horário das 10h, e a versão remota acrescentou a transmissão online. A equipe confirmou que as duas informações devem permanecer.
Identifique os históricos representados por HEAD e origin/main e escreva uma linha final que preserve as duas mudanças.
Escreva pelo menos 40 caracteres (0/40).
Aplique a resolução de conflitos que você já conhece. Antes de retomar o push, confirme:
git status não indica conflitos nem merge em andamento.Só editar e preparar o arquivo não conclui a integração.
Neste exemplo, a branch se chama main. No seu projeto, use o nome real da branch.
git push origin mainAtenção
Se alguém publicar novos commits enquanto você resolve o conflito, o push pode sofrer outra rejeição por histórico remoto atualizado. Nesse caso, busque, inspecione e integre as novidades antes de tentar reenviar. Não use envio forçado.
Você conferiu a linha com o horário e a transmissão online e executou git add README.md. O git status informa que todos os conflitos foram resolvidos, mas o merge ainda está em andamento.
Qual é o próximo passo para retomar o envio com a integração incluída?

Passo 8 de 8
Resolva uma rejeição de envio e comprove a sincronização pelo estado, pelo histórico atualizado e pelo conteúdo dos arquivos.
Você está na branch ajustes-guia, que acompanha origin/ajustes-guia, com a árvore de trabalho limpa.
Seu commit documenta a execução no Linux. Antes do seu envio, uma colega publica instruções para Windows na mesma branch remota. Seu git push origin ajustes-guia é rejeitado por atualização não fast-forward.
Você executa git fetch origin e consulta o histórico com git log --oneline --graph --all --decorate:
* b7c2e90 (origin/ajustes-guia) Documenta execução no Windows
| * a4f8d21 (HEAD -> ajustes-guia) Documenta execução no Linux
|/
* 62c0d8a Adiciona guia de execuçãoExemplo
Os dois commits alteram o mesmo trecho do README.md, então a integração pode parar por conflito.
O guia final deve preservar estas instruções:
python3 app.py.py app.py.Responda em tópicos, incluindo os comandos principais:
pull --no-rebase.Não use envio forçado.
Escreva pelo menos 100 caracteres (0/100).
Atualize novamente o conhecimento do remoto antes de conferir o alinhamento. Além dos comandos abaixo, abra o README.md: um merge concluído precisa preservar o resultado pretendido das duas contribuições.
git fetch origin
git status
git log --oneline --graph --all --decorateResumo ilustrativo, supondo que o remoto não recebeu outras mudanças:
ESTADO
Branch: ajustes-guia
Acompanhamento: sem avanço ou atraso
Árvore de trabalho: limpa; nenhum merge em andamento
HISTÓRICO
* d9e3a60 (HEAD -> ajustes-guia, origin/ajustes-guia) Integra instruções de execução
|\
| * b7c2e90 Documenta execução no Windows
* | a4f8d21 Documenta execução no Linux
|/
* 62c0d8a Adiciona guia de execução
CONTEÚDO DO README.md
Linux: execute `python3 app.py`.
Windows: execute `py app.py`.Dica
A confirmação vale para o estado remoto conhecido na última busca. Se esse fetch revelar novos commits, diagnostique e integre quando necessário; publique apenas se houver commits locais pendentes. O remoto pode mudar novamente depois da conferência.
Resumo
Parabéns! Você concluiu: Sincronizar alterações com fetch, pull e push
Você concluiu este nível!
Agora você vai iniciar: Colaboração com pull requests
Abrir um pull request com uma proposta claraVocê será capaz de propor uma mudança em um repositório com permissão de escrita, escolhendo as branches corretas, explicando a finalidade da proposta e conferindo as alterações antes de abrir o pull request.Milhares de cursos online em vídeo, ebooks e áudiobooks.
Para testar seus conhecimentos no decorrer dos cursos online
Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail
Baixe nosso aplicativo pelo QR Code ou pelos links abaixo:.
+ de 10 milhões
de alunos
Certificado grátis e
válido em todo o Brasil
60 mil exercícios
gratuitos
4,8/5 classificação
nas lojas de apps
Cursos gratuitos em
vídeo, ebooks e audiobooks