Pular para o conteúdo
Cursos

DevClub

LógicaFront-endBack-endMobile

IA Club

IA na prática
Estudar programaçãoEstudar IA
LiçãoIniciantecódigo testado

git status e git log: ler o estado e o histórico do projeto

Como traduzir cada bloco do git status, ler o log em uma linha por commit, filtrar por autor e por arquivo e sair do pager sem precisar fechar o terminal.

Rodolfo Mori4 min de leitura

git status responde onde estão as mudanças de agora; git log responde quais versões já foram gravadas. Ler os dois antes de alterar o histórico evita a maior parte dos comandos dados na branch errada, dos arquivos esquecidos e dos commits que misturam tarefas.

O laboratório da livraria foi preparado com quatro estados simultâneos para que cada símbolo aparecesse de verdade. A forma curta devolveu:

bash
git status --short
M README.md MM catalogo.txt A politica.txt ?? notas.txt

Traduza o status longo como uma lista de decisões

O status longo separa o que entra no próximo commit, o que mudou depois do stage e o que ainda não é rastreado:

bash
git status
On branch main Changes to be committed: modified: catalogo.txt new file: politica.txt

Changes not staged for commit: modified: README.md modified: catalogo.txt

Untracked files: notas.txt

Não trate esses blocos como erro. Eles descrevem escolhas pendentes. O catálogo aparece duas vezes porque uma versão dele foi preparada e depois recebeu outra linha na working tree. O próximo commit leva a primeira versão; a linha nova fica para depois, a menos que você execute git add catalogo.txt novamente.

Pense no status como uma conferência de expedição. Há itens dentro da caixa, itens alterados na bancada e itens sem etiqueta. O limite da analogia é que o stage não contém uma cópia física independente: ele registra o conteúdo por objetos e entradas do índice.

As duas colunas da forma curta

A coluna da esquerda representa a diferença entre HEAD e stage. A da direita representa stage e working tree. M é preparado, M é apenas modificado, MM está nos dois lugares, A é novo preparado e ?? é desconhecido.

Você pode conferir cada lado com dois diffs:

bash
git --no-pager diff --stat
git --no-pager diff --cached --stat
README.md | 2 ++ catalogo.txt | 1 + 2 files changed, 3 insertions(+) catalogo.txt | 1 + politica.txt | 1 + 2 files changed, 2 insertions(+)

O primeiro bloco ainda não entra no commit. O segundo é a proposta atual. Use --name-status quando você precisa de uma lista mais compacta:

bash
git diff --name-status
git diff --cached --name-status
M README.md M catalogo.txt M catalogo.txt A politica.txt

Leia o log sem perder o desenho

O log completo mostra hash, autor, data e mensagem. Para uma leitura rápida, --oneline encurta o hash; --decorate exibe nomes; --graph desenha pais.

bash
git --no-pager log --oneline --graph --decorate -4
* 4fd86f9 (HEAD -> main) docs: explica onde consultar livros * a6fa170 feat: adiciona Refatoração ao catálogo * 9ba9c22 docs: inicia catálogo

Uma linha vertical indica uma sequência sem divergência. Depois de branches e merge, barras inclinadas mostram os pais. O desenho não é decoração: ele evita comparar commits como se fossem apenas uma lista cronológica.

Se a saída ocupar a tela, o Git pode abrir um pager. Use setas para navegar e q para sair. O exemplo usa --no-pager para que a captura termine no mesmo terminal; não é necessário colocar essa opção em todo comando cotidiano.

Filtre por pessoa, texto e arquivo

Quando o histórico cresce, git log aceita perguntas específicas. O filtro de autor encontrou os dois commits mais recentes de Ana:

bash
git --no-pager log --oneline --author='Ana Souza' -2
4fd86f9 docs: explica onde consultar livros a6fa170 feat: adiciona Refatoração ao catálogo

-S procura commits que alteraram a quantidade de uma sequência. É útil para descobrir quando um termo entrou ou saiu:

bash
git --no-pager log --oneline -S'Refatoração' -- catalogo.txt
a6fa170 feat: adiciona Refatoração ao catálogo

O -- encerra opções e inicia caminhos. Sem ele, um nome começando com hífen pode ser interpretado como opção. Para padrões de diff, -G usa expressão regular; para história de um arquivo, coloque apenas -- caminho.

Show abre um commit específico

git show combina metadados e patch. Com --stat, você observa o tamanho da mudança antes de ler todas as linhas:

bash
git --no-pager show --stat --oneline HEAD
4fd86f9 docs: explica onde consultar livros README.md | 2 ++ 1 file changed, 2 insertions(+)

Troque HEAD por um hash obtido no seu log. Não copie 4fd86f9 para outro repositório: esse identificador pertence ao sandbox. Se o hash curto for ambíguo num projeto enorme, o Git pede mais caracteres.

Blame começa uma investigação, não uma acusação

git blame associa cada linha ao último commit que a tocou. No catálogo, duas linhas commitadas e duas ainda locais ficaram claras:

bash
git --no-pager blame catalogo.txt
^9ba9c22 (Ana Souza 2026-08-24 10:00:00 -0300 1) Clean Code | 89.90 a6fa170c (Ana Souza 2026-08-24 10:05:00 -0300 2) Refatoração | 99.90 00000000 (Not Committed Yet 2026-08-24 21:43:02 -0300 3) Domain-Driven Design | 129.90 00000000 (Not Committed Yet 2026-08-24 21:43:02 -0300 4) Padrões de Projeto | 119.90

Use o hash como porta para contexto com git show, não como ferramenta para culpar alguém. A pessoa listada pode ter apenas formatado uma linha que nasceu em outra decisão. O histórico explica mudanças; conversa e revisão explicam o contexto humano.

O erro mais comum é rodar git log na pasta errada e acreditar que o projeto perdeu histórico. Confira pwd, git status e a branch atual. Depois pratique branches e switch, onde --graph começa a fazer mais sentido. Se precisar remover uma seleção ou recuperar um commit, consulte desfazer no Git.

Sua missão é criar um estado MM, explicar as duas colunas antes de executar outro git add e encontrar pelo texto qual commit introduziu uma linha. Termine quando o ciclo do primeiro commit e o log contarem a mesma história sem abrir o editor. Registre também a hipótese antes da consulta: qual arquivo está no stage, qual pessoa introduziu a sequência e qual commit é pai do atual. A saída vale como teste do seu modelo mental, não como uma lista para copiar sem interpretação.

  • git
  • git status
  • git log
  • historico
  • diff

Perguntas frequentes

Como sair da tela do git log no terminal?
Pressione q quando o Git abriu o pager. Você também pode usar --no-pager numa execução ou configurar o pager, mas não precisa fechar o terminal.

Dúvidas e comentários

Travou em algum passo? Pergunte aqui — a equipe e outros alunos respondem.

Todo o código deste artigo foi executado em git version 2.54.0 (Apple Git-156) no macOS 27, e as saídas exibidas são as reais — como produzimos este conteúdo.

Fontes consultadas

  1. Git — git status — git-scm.com
  2. Git — git log — git-scm.com

Continue por aqui