W3docs

Introdução

Breve descrição dos comandos git status, git log, git tag e git blame, com exemplos de uso comuns e básicos.

git blame

Depois de ter um repositório Git com algum histórico, a maior parte do trabalho diário não é sobre alterar arquivos — é sobre compreender o estado atual e passado deles. Antes de fazer um commit, push ou reverter qualquer coisa, você geralmente quer responder perguntas como: O que mudei mas ainda não salvei? Quem escreveu esta linha e por quê? Quando esse bug foi introduzido? A qual release este commit pertence?

Esta parte do tutorial aborda os quatro comandos mais utilizados ao examinar um repositório, em vez de modificá-lo:

ComandoO que respondeEscopo
git statusO que mudou desde o último commit e o que está em staging?Diretório de trabalho + área de staging
git logQual é o histórico de commits?Apenas snapshots confirmados
git tagQuais commits são notáveis (ex.: releases)?Ponteiros nomeados para commits
git blameQuem alterou cada linha por último e em qual commit?Autoria por linha de um arquivo

Cada comando é resumido abaixo com um exemplo rápido. As páginas seguintes cobrem todas as opções em detalhes.

git status

O comando git status exibe o estado do diretório de trabalho e da área de staging, permitindo ver quais alterações estão em staging para o próximo commit e quais arquivos ainda não são rastreados pelo Git. Ele não mostra nenhum histórico de commits — apenas a diferença entre seus arquivos atuais e o último commit.

Execute-o dentro de qualquer repositório:

$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   index.html

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
        modified:   style.css

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        notes.txt

Aqui index.html está em staging (será incluído no próximo commit), style.css foi alterado mas não está em staging, e notes.txt é novo e não rastreado. Torne o git status um hábito antes de cada commit para nunca confirmar por acidente — ou esquecer — um arquivo.

git log

O comando git log examina o histórico de commits de um repositório e ajuda a encontrar uma versão específica de um projeto. Ele lista, filtra e pesquisa commits — mas opera apenas no histórico confirmado, portanto, qualquer coisa que você ainda não tenha commitado não aparecerá.

$ git log --oneline -3
9a3c1f4 (HEAD -> main) Fix navbar alignment on mobile
1d72b08 Add contact form validation
f0e5a91 Initial commit

A flag --oneline condensa cada commit ao seu hash curto e assunto. Você pode filtrar por autor (--author), por data (--since, --until) ou por conteúdo (-S "searchterm") para identificar exatamente quando uma mudança ocorreu. Para inspecionar um único commit completo, combine o git log com o git show.

git tag

Tags são referências que apontam para pontos específicos e notáveis no histórico do Git. Seu principal propósito é marcar uma release — por exemplo, v1.0.0. Ao contrário de um branch, uma tag não se move à medida que novos commits são adicionados; uma vez criada, aponta permanentemente para o mesmo snapshot.

$ git tag v1.0.0          # create a lightweight tag on the current commit
$ git tag                 # list existing tags
v1.0.0
$ git tag -a v1.1.0 -m "Release 1.1.0"   # create an annotated tag with a message

Uma tag lightweight (leve) é apenas um nome para um commit, enquanto uma tag annotated (-a) também armazena o autor da tag, uma data e uma mensagem — tags anotadas são recomendadas para releases. Tags não são enviadas automaticamente; você as compartilha com git push origin v1.0.0 (ou git push --tags).

git blame

O comando git blame mostra os metadados de autoria associados a cada linha de um arquivo: o commit, o autor e a data em que aquela linha foi alterada pela última vez. É a ferramenta ideal para entender por que uma determinada linha existe e com quem falar a respeito.

$ git blame -L 1,3 index.html
9a3c1f4a (Jane Doe  2024-03-12 10:22:01 +0000  1) <!DOCTYPE html>
1d72b08c (John Roe  2024-02-28 14:05:33 +0000  2) <html lang="en">
9a3c1f4a (Jane Doe  2024-03-12 10:22:01 +0000  3)   <head>

A flag -L 1,3 limita a saída às linhas 1–3. Cada linha é prefixada com o hash curto do commit, o autor e o timestamp da última alteração. Para aprofundar-se em um desses commits, copie o hash para o git show ou git log.

Examinar vs. alterar

Um modelo mental útil: esses comandos são somente leitura. Nenhum de git status, git log, git tag (ao listar) ou git blame altera seus arquivos ou histórico — eles apenas reportam o estado. Isso os torna seguros para executar a qualquer momento. Quando você realmente quiser alterar o que está registrado, recorre a outras ferramentas como git commit, git checkout, ou git diff para visualizar as alterações primeiro.

Prática

Prática
Qual das seguintes afirmações descreve corretamente as funcionalidades de vários comandos Git para examinar um repositório?
Qual das seguintes afirmações descreve corretamente as funcionalidades de vários comandos Git para examinar um repositório?
Was this page helpful?