Git — Histórico

0:00 / 0:00

Você fez vários commits — agora quer navegar a linha do tempo. Esse card cobre os três comandos de leitura do histórico: git log (lista cronológica), git diff (o que mudou) e git show (abrir uma foto específica). É a primeira vez que você sai de "criar commits" e entra em "explorar o que já existe".

git log — a lista cronológica

O git log mostra todos os commits da branch atual, do mais novo pro mais antigo. É o comando-base pra ver o histórico.

git log

O output, pra cada commit, tem 4 linhas:

O log abre num pager (geralmente less). Pra navegar:

git log --oneline — versão compacta

Em projetos com muitos commits, o log padrão fica longo demais. A flag --oneline reduz cada commit a uma linha só:

git log --oneline

Cada linha mostra: hash curto (7 caracteres) + mensagem. Sem autor, sem data. Útil pra varrer rapidamente os últimos N commits e achar o que você procura. Quando achou, pode usar o hash curto em outros comandos (git show, git diff).

3f8a9c2 Adiciona DepartamentoForm com 4 campos
b642616 Corrige NPE no DepartamentoBean.toString
fc0d512 Refatora ProdutoList pra usar setOnclick

Combinações úteis com --oneline:

git log --graph --all — desenho das branches

Quando você começar a usar branches (próximos cards do mini-curso), o histórico deixa de ser uma linha reta e vira uma árvore com vários ramos. A flag --graph desenha essa árvore com caracteres ASCII no terminal:

git log --oneline --graph --all

O --all inclui todas as branches (não só a atual). O --graph desenha as ramificações com *, |, \, /. Você consegue ver visualmente onde uma branch saiu da outra e onde foram mergeadas.

Exemplo de output:

* 3f8a9c2 (HEAD -> dev) Adiciona DepartamentoForm
* b642616 Corrige NPE no DepartamentoBean
| * fc0d512 (feature/login) Adiciona tela de login
|/
* 0273f34 (main) Junção de projetos
* 9876abc Setup inicial

Por enquanto, com uma branch só, o --graph é uma linha reta. Mas vale conhecer o comando — vai virar essencial quando branches entrarem em cena.

git diff — o que mudou no working tree

O git diff mostra as diferenças entre o working tree e o último commit. Ou seja, o que você editou desde a última foto, mas ainda não adicionou ao stage.

git diff

O output mostra, pra cada arquivo modificado, blocos de mudança (chamados hunks):

É a forma mais rápida de revisar o que você fez antes de commitar — sempre rodar git diff antes do git add pra confirmar que as mudanças são as que você esperava.

git diff --staged — o que está no stage

Depois de rodar git add, o git diff sozinho não mostra mais aquela mudança — porque ela saiu do working tree e foi pro stage. Pra ver o que está no stage:

git diff --staged

(Também aceita --cached, é um sinônimo histórico.) Mostra a diferença entre o stage e o último commit — exatamente o que vai virar foto se você der git commit agora.

Combinando os dois:

Os dois juntos cobrem todas as mudanças pendentes. Se ambos não mostram nada, o repositório está sincronizado com o último commit (working tree clean).

git show — abrindo uma foto específica

O git show abre um commit específico e mostra: os metadados (hash, autor, data, mensagem) + o diff completo dele em relação ao commit pai.

git show 3f8a9c2
git show HEAD
git show HEAD~1

Você pode passar:

É o comando que você usa quando quer entender o que foi feito num commit específico do passado. Útil quando o git log mostra uma mensagem interessante e você quer ver os detalhes do que mudou.

Hash: curto, longo e como referenciar

O hash de um commit tem 40 caracteres (3f8a9c2bd5e1f...). Mas o git aceita versões abreviadas — desde que sejam únicas dentro do repositório, normalmente 7 caracteres bastam:

git show 3f8a9c2     # 7 caracteres — funciona se for único
git show 3f8a9c2bd5  # mais longo, ainda funciona
git show 3f          # se só 1 commit começa com "3f", funciona; senão, erro

O --oneline já mostra o hash em 7 caracteres, então é o tamanho padrão pra trabalho do dia. Se houver ambiguidade, o git avisa e você passa mais caracteres.

Outras formas comuns de referenciar commits sem hash:

Os 3 comandos juntos

Cenário típico: você quer revisar o que aconteceu na última semana num projeto.

  1. git log --oneline --since="1 week ago" — varre os commits da semana, lista compacta.
  2. Achou um commit interessante na lista (digamos 3f8a9c2): git show 3f8a9c2 — abre o commit, vê o que mudou.
  3. Quer comparar dois commits específicos? git diff <hash1> <hash2> — mostra a diferença entre dois pontos da linha do tempo.

Esses três comandos cobrem 90% da exploração de histórico. As variações com --graph, --author, --grep (busca por mensagem) entram quando você precisa filtrar mais.