No seu Mac, abra o Terminal, acesse o repositório e execute git status -sb. Se a ramificação atual exibir ahead 1 (ou outro número positivo) em relação ao seu upstream, ela possui commits locais não representados pela ramificação de rastreamento remoto com a qual o Git está comparando. Faça um fetch primeiro para atualizar essa comparação e, em seguida, liste os commits específicos. Isso verifica o histórico com commit; alterações que não foram submetidas a commit são um tipo separado de mudança local.

Verifique a ramificação atual em relação à sua ramificação de rastreamento remoto

No Terminal, mude para a pasta do projeto. Você pode digitar cd , arrastar a pasta do Finder para a janela do Terminal e pressionar Return. Execute:

git status -sb

Um resultado como ## main...origin/main [ahead 2] significa que a main local tem dois commits à frente do seu upstream configurado, origin/main, com base no estado remoto registrado mais recentemente pelo Git. [behind 1] significa que a ramificação remota rastreada tem um commit ausente localmente. Se ambas as contagens aparecerem, as ramificações divergiram. A documentação do Git informa que o status pode mostrar contagens de "ahead" (à frente) e "behind" (atrás) quando um upstream está definido e disponível para comparação. Documentação do Git status

Para o status completo, use git status. Ele também relata alterações na árvore de trabalho (working tree) e na área de preparação (staging area). Esses arquivos modificados ou não rastreados (untracked) não são prova de commits não enviados: eles ainda não são commits. Uma árvore de trabalho limpa ainda pode ter commits não enviados, e uma suja pode não ter nenhum.

Atualize a comparação e, em seguida, inspecione os commits

O nome origin/main é uma referência local de rastreamento remoto; não é uma visualização em tempo real do servidor. Execute um fetch para atualizar as referências dos remotos configurados e, em seguida, verifique o status novamente:

git fetch
git status -sb

O comando git fetch atualiza as informações de rastreamento remoto sem mesclar essas alterações obtidas na sua ramificação atual. Ele não envia commits locais. O fetch pode falhar se o remoto não puder ser alcançado ou se a autenticação não estiver disponível; nesse caso, a comparação antiga não poderá informar o que está no servidor agora. Documentação do Git fetch

Se o status mostrar que a ramificação está à frente e tem um upstream, exiba os commits que são alcançáveis a partir da sua ramificação atual, mas não daquele upstream:

git log --oneline '@{u}..HEAD'

Cada linha de saída é um commit; o primeiro é o mais recente no intervalo. Um resultado vazio significa que o Git não encontrou commits nesse intervalo. O atalho @{u} significa o upstream configurado da ramificação atual, e o intervalo de dois pontos seleciona os commits alcançáveis a partir de HEAD, mas não do upstream. Documentação de revisões do Git

Por exemplo, se o status disser [ahead 2] e o log listar dois assuntos de commit, esses são os commits localmente à frente da ramificação rastreada. Esta é uma confirmação útil antes de decidir se você pretende enviá-los. O comando em si não envia nada.

Se o Git não conseguir comparar a ramificação

Se git status -sb não mostrar contagens de ahead/behind, a ramificação pode não ter um upstream configurado. Execute:

git branch -vv

A ramificação atual é marcada com *; o texto entre colchetes, quando presente, identifica seu upstream e as contagens de divergência. Se nenhum upstream for exibido, o Git não possui a referência de rastreamento usual para essa comparação. O comando git remote -v pode mostrar os nomes e URLs remotos configurados, mas não estabelece qual ramificação remota é o destino pretendido. A documentação do Git aponta os upstreams como configurações opcionais de ramificação usadas por comandos como status. Documentação do Git pull

Evite adivinhar origin/main: sua ramificação pode rastrear uma ramificação com nome diferente ou um remoto diferente. Se você souber a ramificação remota pretendida, compare explicitamente após a busca (fetch), substituindo origin/main pelo nome real dela:

git log --oneline origin/main..HEAD

Isso lista os commits presentes no seu HEAD atual, mas ausentes dessa referência. Se o destino for incerto, inspecione a configuração da ramificação e do remoto antes de tratar o resultado como uma prévia do push. O Git permite que o destino de push configurado seja diferente do upstream usado para comparação. Documentação de revisões do Git

O que esta verificação estabelece e o que não estabelece

A comparação é tão recente quanto o último fetch bem-sucedido. Outra pessoa pode enviar novos commits após o seu fetch, ou o servidor pode mudar antes de você realizar o push. Um fetch bem-sucedido fornece ao Git uma referência mais atualizada; ele não garante que um push posterior terá sucesso. Da mesma forma, um commit ausente em origin/main não está necessariamente ausente de todos os remotos ou ramificações.

Quando você confirmar o destino pretendido e quiser enviar os commits, use o comando de push apropriado para a configuração de ramificação e remoto do seu repositório. Se o Git relatar que nenhum upstream está configurado, ele pode exigir um remoto e uma ramificação explícitos; verifique o destino com cuidado antes de fazer o push. As etapas acima identificam o histórico local em relação ao rastreado para que você possa tomar essa decisão sem confundir edições de arquivos sem commit com commits de fato.

Fontes