Git log: visualizando o histórico de commits

1. Introdução ao git log

O histórico de commits é o coração do Git. Cada commit registra um ponto na evolução do seu projeto, contendo informações como autor, data, hash único e mensagem descritiva. Visualizar esse histórico é essencial para entender o que foi feito, quem fez e quando.

O comando básico git log exibe todos os commits do branch atual em ordem cronológica reversa (do mais recente para o mais antigo). A saída padrão mostra:

commit 7a3b5c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b
Author: João Silva <joao@exemplo.com>
Date:   Mon Jan 15 14:30:00 2024 -0300

    Corrige bug no cálculo de impostos

commit 9b8c7d6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c
Author: Maria Souza <maria@exemplo.com>
Date:   Sun Jan 14 10:15:00 2024 -0300

    Adiciona validação de formulário

Para navegar no terminal, use as setas para cima/baixo e pressione q para sair da visualização.

2. Formatando a saída do log

O Git oferece diversas opções para personalizar a exibição do histórico:

--oneline: versão compacta com hash curto e mensagem do commit.

7a3b5c8 Corrige bug no cálculo de impostos
9b8c7d6 Adiciona validação de formulário
1a2b3c4 Refatora módulo de autenticação

--graph: visualização gráfica de branches e merges, útil para projetos com múltiplas linhas de desenvolvimento.

*   7a3b5c8 (HEAD -> main) Corrige bug no cálculo de impostos
|\  
| * 4d5e6f7 (fix/calculos) Ajusta alíquotas
* | 9b8c7d6 Adiciona validação de formulário
|/  
* 1a2b3c4 Refatora módulo de autenticação

--pretty=format:"...": personalização completa usando placeholders como %h (hash curto), %an (autor), %ar (data relativa) e %s (mensagem).

git log --pretty=format:"%h - %an, %ar : %s"
7a3b5c8 - João Silva, 2 dias atrás : Corrige bug no cálculo de impostos
9b8c7d6 - Maria Souza, 3 dias atrás : Adiciona validação de formulário

3. Filtrando por autor e data

Para encontrar commits específicos, filtre por autor ou período:

Por autor:

git log --author="Maria"

Por intervalo de datas:

git log --after="2024-01-01" --before="2024-01-31"

Combinações:

git log --author="João" --since="2 weeks ago"

4. Filtrando por arquivos e mensagens

Por arquivo específico:

git log -- src/app.js

Por texto na mensagem do commit:

git log --grep="bug"

Por alteração no código (busca por string adicionada ou removida):

git log -S"calcularTotal"

5. Limitando o número de commits

Últimos N commits:

git log -n 5

A partir de uma data:

git log --since="2024-01-01"

Paginação com skip:

git log --skip=10 --max-count=5

6. Visualizando diferenças e detalhes

-p (patch): mostra o diff completo de cada commit.

git log -p -n 2

--stat: resumo de arquivos alterados e linhas modificadas.

git log --stat

Saída exemplo:

commit 7a3b5c8
Author: João Silva <joao@exemplo.com>
Date:   Mon Jan 15 14:30:00 2024 -0300

    Corrige bug no cálculo de impostos

 src/calculos.js | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

--name-only: lista apenas os nomes dos arquivos alterados.

git log --name-only

7. Navegando entre branches e tags

Commits em um branch que não estão em outro:

git log main..develop

Histórico de todos os branches:

git log --all

Commits entre duas tags (útil para releases):

git log v1.0..v2.0

8. Dicas avançadas e combinações

Visão completa do repositório:

git log --oneline --graph --all --decorate

Criando alias personalizado:

git config --global alias.lg "log --oneline --graph --all --decorate"

Agora use git lg para obter a mesma visualização.

Usando git shortlog: resumo agrupado por autor.

git shortlog -sn

Saída exemplo:

   120  João Silva
    85  Maria Souza
    42  Pedro Santos

Combinação avançada para encontrar commits de um autor específico em um intervalo de datas, mostrando apenas nomes de arquivos:

git log --author="Maria" --since="2024-01-01" --until="2024-03-31" --name-only --oneline

Dominar o git log transforma a maneira como você navega pelo histórico do projeto. Comece com as opções básicas e gradualmente incorpore filtros e formatações personalizadas ao seu fluxo de trabalho. A prática constante tornará essas ferramentas intuitivas e indispensáveis no seu dia a dia com Git.

Referências