Como Verificar se um Branch Git Está Atrasado em Relação ao Branch Remoto

GitBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como determinar se seu branch Git local está atrás do seu branch remoto correspondente. Abordaremos os passos essenciais para alcançar isso, começando com a obtenção das últimas alterações do repositório remoto usando git fetch.

Após o fetch, você utilizará git status para verificar rapidamente se seu branch está atrás do remoto. Finalmente, você aprenderá como usar git log HEAD..@{u} para visualizar os commits específicos que existem no branch remoto, mas não no seu branch local, fornecendo uma compreensão detalhada das diferenças.

Buscar (Fetch) do Remoto com git fetch

Nesta etapa, aprenderemos como obter (fetch) as alterações de um repositório Git remoto. Imagine que você está colaborando com outras pessoas, e elas fizeram alterações no projeto. git fetch é o comando que você usa para baixar essas alterações para sua máquina local sem mesclá-las ao seu trabalho atual.

Primeiro, vamos simular ter um repositório remoto. Criaremos um simples localmente para fins de demonstração.

cd ~/project
mkdir remote-repo
cd remote-repo
git init --bare

Isso cria um repositório "bare" (sem área de trabalho), que é tipicamente usado como um repositório remoto central. Agora, vamos voltar ao nosso repositório my-time-machine e adicionar isso como um remoto.

cd ~/project/my-time-machine
git remote add origin ../remote-repo

Adicionamos um remoto chamado origin apontando para nosso repositório remoto simulado. Agora, vamos fazer uma alteração no repositório remoto e, em seguida, obter (fetch) essa alteração.

cd ~/project/remote-repo
echo "This is a remote change." > remote_file.txt
git add remote_file.txt
git commit -m "Add remote file"

Agora, de volta ao nosso repositório my-time-machine, vamos obter as alterações do remoto.

cd ~/project/my-time-machine
git fetch origin

Você deve ver uma saída indicando que o Git baixou as alterações do repositório remoto. Algo como isto:

remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), 258 bytes | 258.00 KiB | elapsed 0.00s.
From ../remote-repo
 * [new branch]      master     -> origin/master

O comando git fetch baixa os commits, arquivos e referências do repositório remoto para o seu repositório local. No entanto, ele não mescla automaticamente essas alterações em seu branch de trabalho atual. Isso permite que você inspecione as alterações antes de integrá-las.

Pense em git fetch como obter as últimas atualizações de um feed de notícias. Você vê as manchetes e resumos, mas ainda não leu os artigos completos. Você pode decidir quais artigos (alterações) deseja ler (mesclar) mais tarde.

Usar git status para Verificar o Status de Atraso

Na etapa anterior, obtivemos (fetched) as alterações do repositório remoto. Agora, vamos usar git status para ver como nosso repositório local se compara ao remoto.

Certifique-se de estar no diretório ~/project/my-time-machine:

cd ~/project/my-time-machine

Agora, execute o comando git status:

git status

Você deve ver uma saída semelhante a esta:

On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

Esta saída nos diz algumas coisas importantes:

  • "On branch master": Estamos atualmente no branch master.
  • "Your branch is behind 'origin/master' by 1 commit": Esta é a mensagem chave! Ela indica que nosso branch master local está um commit atrás do branch master no remoto origin. Isso significa que há um commit no remoto que ainda não temos localmente.
  • "(use "git pull" to update your local branch)": O Git até nos dá uma dica sobre como atualizar nosso branch local.

O comando git status é sua janela para o estado do seu repositório. Ele informa em qual branch você está, se você tem alguma alteração não commitada e como seu branch atual se compara ao seu branch upstream (neste caso, origin/master).

Compreender a saída de git status é crucial para trabalhar com Git de forma eficaz. Ele ajuda você a saber se precisa puxar (pull) as alterações do remoto, se você tem alterações para commitar ou se seu diretório de trabalho está limpo.

Executar git log HEAD..@{u} para Commits Atrasados

Na etapa anterior, git status nos informou que nosso branch local está atrasado em relação ao branch remoto. Mas como podemos ver quais commits estamos atrasados?

Podemos usar o comando git log com uma sintaxe especial para mostrar apenas os commits que estão no branch remoto, mas não no nosso branch local. A sintaxe HEAD..@{u} compara nosso branch atual (HEAD) com seu branch upstream (@{u}, que é origin/master em nosso caso).

Certifique-se de estar no diretório ~/project/my-time-machine:

cd ~/project/my-time-machine

Agora, execute o seguinte comando:

git log HEAD..@{u}

Você deve ver a entrada do log para o commit que fizemos no repositório remoto na Etapa 1:

commit <commit-hash> (origin/master)
Author: Your Name <your.email@example.com>
Date:   <Date and Time>

    Add remote file

Este comando é muito útil para ver exatamente quais alterações você obterá quando fizer pull do remoto. Ele mostra o histórico de commits que está presente no branch de rastreamento remoto (origin/master), mas ainda não está no seu branch local (master).

Compreender como visualizar os commits em que você está atrasado é importante para se manter atualizado com o trabalho de seus colaboradores e para planejar suas mesclagens (merges).

Pressione q para sair da visualização do log.

Resumo

Neste laboratório, aprendemos como verificar se um branch Git local está atrasado em relação à sua contraparte remota. Começamos simulando um repositório remoto e adicionando-o ao nosso projeto local usando git remote add. Em seguida, praticamos o uso de git fetch para baixar as alterações do remoto sem mesclá-las (merging), demonstrando como este comando atualiza nosso repositório local com as informações remotas mais recentes.

Após o fetch, normalmente usaríamos git status para ver se nosso branch atual está atrasado em relação ao branch de rastreamento remoto e git log HEAD..@{u} para visualizar os commits específicos que estão presentes no remoto, mas ainda não em nosso branch local. Essas etapas, em conjunto, fornecem uma imagem clara da divergência entre nosso trabalho local e o repositório remoto.