git blame

Depuração

Mostrar quem alterou por último cada linha de um arquivo


O comando 'git blame' imprime um arquivo com, para cada linha, o commit que a alterou por último, o autor e a data. É o jeito mais rápido de descobrir por que uma linha está assim: pegue o hash e leia o commit completo com git show. Linhas ainda não commitadas aparecem como «Not Committed Yet». Use -L para ver só algumas linhas.

Sinopse

git blame [<options>] [<rev>] [--] <file>
[ ] opcional| ou<arg> valor a substituir... repetível--flag opção

Opções

Clique em uma opção para expandir

Iniciante (2)

Anota só o intervalo de linhas dado, p. ex. -L 10,20 (ou uma função com -L :nome).

RecomendadoFoque nas linhas que você está investigando

Exemplo

git blame -L 12,14 app.js

Mostra o e-mail do autor em vez do nome.

Quando necessárioMostrar o e-mail dos autores quando os nomes são ambíguos

Exemplo

git blame -e app.js

Avançado (1)

Finge que um commit (p. ex. uma grande reformatação) não mudou nada; atribui as linhas a commits anteriores.

Quando necessárioPular commits só de formatação

Exemplo

git blame --ignore-rev a1b2c3d app.js

Escolhendo a opção certa

Descobrir de onde veio uma alteração

Três ferramentas, três perguntas

ComandoResponde
git blame fileQual commit tocou cada linha por último?
git log -p fileCada alteração já feita no arquivo
git log -S "text"Qual commit adicionou ou removeu este texto?

Exemplos

Blame de um arquivo

git blame app.js

Cada linha com seu último commit, autor e data.


Um intervalo de linhas

git blame -L 10,20 app.js

Só as linhas 10 a 20.


Uma versão mais antiga

git blame v1.0 -- app.js

Blame do arquivo como estava na tag v1.0.

Exemplos de fluxos de trabalho

1
git blame -L 40,45 app.js

Encontrar o commit da linha

2
git show a1b2c3d

Ler o commit inteiro e a mensagem

Solução de problemas

fatal: no such path 'x' in HEAD

Causa: O arquivo não é rastreado, ou o caminho está errado

Faça o commit do arquivo antes, ou confira o caminho

Toda linha aponta para um commit de reformatação

Causa: O blame mostra a ÚLTIMA alteração

Use --ignore-rev <commit>, ou faça blame do commit anterior

Dicas e armadilhas

Boas práticas

  • ✓Leia o commit (git show) antes de tirar conclusões do blame.
  • ✓Mantenha um arquivo .git-blame-ignore-revs listando commits só de formatação.

Erros comuns

  • ✗Levar o blame como culpa: a última pessoa a tocar uma linha pode só tê-la reformatado.
  • ✗Parar num commit de formatação em vez de fazer blame do pai dele (git blame <hash>^ -- file).
  • ✗Esquecer o -L em arquivos grandes e rolar milhares de linhas.

Perguntas frequentes

A:

A linha vem do primeiro commit do histórico: o blame não pôde voltar mais.

A:

Uma linha que você alterou na cópia de trabalho mas ainda não commitou.