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".
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:
HEAD, main, origin/main) e tags.O log abre num pager (geralmente less). Pra navegar:
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 --oneline -10 — só os últimos 10 commits.git log --oneline --author="Flavio" — só os commits seus.git log --oneline --since="1 week ago" — só os commits da última semana.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.
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):
- e aparecem em vermelho.+ e aparecem em verde.@@ -45,7 +45,9 @@. Lê assim: "do arquivo antigo, a partir da linha 45, mostro 7 linhas; do arquivo novo, a partir da linha 45, mostro 9 linhas".É 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.
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:
git diff = "o que eu editei e ainda não adicionei" (working tree vs stage)git diff --staged = "o que eu adicionei e ainda não commitei" (stage vs último commit)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).
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:
git log.HEAD — o commit atual da branch (o último que você fez).HEAD~1 — o commit "um antes" do HEAD. HEAD~2 é dois antes, e assim por diante.É 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.
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:
HEAD — o último commit da branch atual.HEAD~N — N commits antes do HEAD (cuidado: ~, não -).main, dev, feature/login — o último commit daquela branch.v1.0 — uma tag (vem nos cards finais).Cenário típico: você quer revisar o que aconteceu na última semana num projeto.
git log --oneline --since="1 week ago" — varre os commits da semana, lista compacta.3f8a9c2): git show 3f8a9c2 — abre o commit, vê o que mudou.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.