Como Verificar se um Repositório Git Possui Commits Não Enviados

GitBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se seu repositório Git local possui commits que ainda não foram enviados para um repositório remoto. Exploraremos diferentes métodos para identificar esses commits "não enviados" (unpushed), começando com o comando fundamental git status para ver se sua branch local está à frente de sua contraparte remota.

Em seguida, você aprenderá como usar git log @{u}..HEAD para listar especificamente os commits que estão presentes localmente, mas não na branch upstream. Finalmente, abordaremos brevemente como verificar o status em todas as branches para garantir uma compreensão abrangente do estado do seu repositório. Ao final deste laboratório, você estará equipado com os comandos essenciais para gerenciar e rastrear efetivamente suas alterações Git locais antes de enviá-las remotamente.

Verificar git status para Commits à Frente

Nesta etapa, aprenderemos como verificar se sua branch local está "à frente" da branch remota usando git status. Este é um cenário comum quando você fez commits localmente, mas ainda não os enviou para um repositório remoto.

Primeiro, vamos garantir que estamos no diretório do nosso projeto. Abra seu terminal e navegue até o diretório my-time-machine:

cd ~/project/my-time-machine

Agora, vamos criar um novo arquivo e adicionar algum conteúdo a ele. Simularemos a realização de uma alteração que eventualmente faremos o commit.

echo "This is a new line for the future." >> message.txt

Este comando anexa o texto "This is a new line for the future." ao arquivo message.txt que criamos anteriormente.

Em seguida, vamos preparar essa alteração usando git add:

git add message.txt

Agora, vamos criar um novo commit com uma mensagem descrevendo a alteração:

git commit -m "Add another message to the future"

Você deve ver uma saída semelhante a esta, indicando que um novo commit foi criado:

[master a1b2c3d] Add another message to the future
 1 file changed, 1 insertion(+)

Agora que temos um novo commit localmente, vamos verificar o status do nosso repositório novamente usando git status:

git status

Desta vez, a saída será diferente. Você deve ver algo assim:

On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

A linha "Your branch is ahead of 'origin/master' by 1 commit." nos diz que nossa branch master local tem um commit que não está presente na branch origin/master (que representa a versão remota de nossa branch). Esta é uma situação muito comum quando você está trabalhando em um projeto e fazendo alterações localmente antes de compartilhá-las com outras pessoas.

Compreender git status é crucial porque ele fornece uma imagem clara do estado atual do seu repositório. Ele informa quais arquivos foram modificados, quais alterações estão preparadas e se sua branch local está sincronizada com a branch remota. Isso ajuda você a acompanhar seu trabalho e se preparar para enviar suas alterações para um repositório remoto.

Usar git log @{u}..HEAD

Na etapa anterior, vimos que git status nos informa que nossa branch local está à frente da branch remota. Mas como podemos ver quais commits estão à frente? É aqui que o comando git log @{u}..HEAD é útil.

A sintaxe @\{u\} (ou @{upstream}) se refere à branch upstream que sua branch atual está rastreando. Em nosso caso, como não definimos explicitamente uma branch upstream, o Git assume por padrão origin/master (assumindo que origin é o nome do remoto e master é o nome da branch). O HEAD se refere ao topo da sua branch local atual.

Portanto, @{u}..HEAD significa "mostre-me os commits que estão na minha branch atual (HEAD), mas não na branch upstream (@{u})".

Vamos experimentar no nosso diretório my-time-machine:

cd ~/project/my-time-machine
git log @{u}..HEAD

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

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Jane Doe <jane.doe@example.com>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Add another message to the future

Esta saída mostra o commit que acabamos de criar na etapa anterior. Isso confirma que este commit específico é aquele que está "à frente" da branch remota.

Usar git log @{u}..HEAD é uma maneira poderosa de ver exatamente quais alterações você está prestes a enviar para um repositório remoto. Ele ajuda você a revisar seu trabalho e garantir que você está enviando apenas os commits pretendidos.

Lembre-se, você pode pressionar q para sair da visualização do log.

Verificar com Todas as Branches

Nas etapas anteriores, usamos git status para ver que nossa branch local está à frente e git log @{u}..HEAD para ver os commits específicos que estão à frente. Agora, vamos usar git log --all --decorate --oneline --graph para visualizar o histórico de commits de todas as branches, o que pode nos ajudar a entender a relação entre nossas branches local e remota.

Certifique-se de que você ainda está no diretório ~/project/my-time-machine:

cd ~/project/my-time-machine

Agora, execute o seguinte comando:

git log --all --decorate --oneline --graph

Vamos detalhar as opções:

  • --all: Mostra o histórico de todas as branches.
  • --decorate: Mostra os nomes das branches e tags ao lado dos commits aos quais eles apontam.
  • --oneline: Exibe cada commit em uma única linha.
  • --graph: Desenha uma representação gráfica baseada em texto do histórico de commits no lado esquerdo da saída.

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

* a1b2c3d (HEAD -> master) Add another message to the future
* e4f5g6h (origin/master) Send a message to the future

Nesta saída:

  • A linha superior mostra nosso último commit (a1b2c3d) com a mensagem "Add another message to the future". (HEAD -> master) indica que nosso HEAD atual (onde estamos trabalhando atualmente) e a branch master local estão apontando para este commit.
  • A linha abaixo mostra o commit anterior (e4f5g6h) com a mensagem "Send a message to the future". (origin/master) indica que a branch origin/master (a branch de rastreamento remota) está apontando para este commit.

O gráfico à esquerda (o * e as linhas) mostra visualmente que nossa branch master local avançou um commit em relação à branch origin/master. Isso confirma o que git status nos disse anteriormente.

Este comando é incrivelmente útil para visualizar o histórico do seu repositório, especialmente quando você tem várias branches. Ele ajuda você a entender como as branches divergem e se fundem, e onde suas branches locais estão em relação às branches remotas.

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

Resumo

Neste laboratório, aprendemos como verificar se um repositório Git possui commits não enviados (unpushed commits). Começamos usando git status para identificar se nossa branch local está "à frente" da branch remota. Isso envolveu navegar para o diretório do projeto, criar e preparar um novo arquivo (staging), e commitar as alterações. Após o commit, executar git status novamente mostrou claramente que nossa branch local estava à frente da remota por um commit, indicando a presença de alterações não enviadas.

O laboratório demonstrou a aplicação prática de git status na identificação de commits não enviados, destacando sua importância na compreensão do estado de sincronização entre repositórios locais e remotos.