Pular para o conteúdo principal

Explicação da culpa do Git: Como rastrear o histórico do código e colaborar de forma mais inteligente

Aprenda a usar o Git Blame para rastrear alterações de código, identificar autores e entender o histórico de arquivos. Este guia aborda comandos básicos, recursos avançados e integrações para aprimorar suas habilidades de depuração e colaboração.
Atualizado 26 de mar. de 2025  · 9 min lido

O Git é uma ferramenta poderosa para rastrear alterações de código, especialmente para ajudar as equipes a rastreá-las, colaborar com eficiência e depurar problemas. Ele fornece várias ferramentas para gerenciar o histórico do código; uma das mais úteis é git blame. Esse comando ajuda os desenvolvedores a rastrear a origem de cada linha de um arquivo, mostrando quem o modificou pela última vez e quando.

Neste artigo, exploraremos como você pode usar o site git blame para acompanhar as alterações em um projeto. Começaremos com comandos básicos e, gradualmente, avançaremos para recursos avançados, como ignorar revisões específicas, integrar-se a ferramentas de desenvolvimento e usar práticas recomendadas. Ao final, você terá uma sólida compreensão de como analisar o histórico do código de forma eficaz e melhorar a colaboração dentro da sua equipe.

O que é Git Blame?

Pode ser difícil rastrear as alterações de código, especialmente em projetos grandes em que há vários colaboradores envolvidos. Compreender o histórico de um arquivo é fundamental para depuração, revisão de decisões passadas e manutenção da qualidade do código. Sem um histórico claro, as equipes podem ter dificuldade para determinar por que uma determinada alteração foi feita ou a quem pedir esclarecimentos.

É nesse ponto que o site git blame se torna inestimável. Ele permite que você identifique as alterações em um nível granular, revelando detalhes do commit ao lado de cada linha de código. Com essas informações, você pode encontrar rapidamente o commit relevante, verificar a mensagem associada e ver o contexto mais amplo da alteração. Se você estiver solucionando um bug, revisando modificações ou simplesmente tentando entender a evolução de um arquivo, o git blame fornece os insights necessários para tomar decisões informadas.

Entendendo o Git Blame: Um guia para desenvolvedores

Por que usar o git blame?

Ao trabalhar em uma equipe ou depurar um problema, saber quem editou uma linha de código pela última vez pode ser útil. Se um bug aparecer após uma atualização recente, o site git blame ajuda a identificar a alteração exata que introduziu o problema. Ele também permite que os desenvolvedores entrem em contato com a pessoa certa quando precisarem de esclarecimentos sobre um problema específico.

Esse comando também é útil para você entender o raciocínio por trás das alterações. Os comentários de código e as mensagens de confirmação às vezes não capturam todo o processo de pensamento. Ao rastrear uma alteração até um commit específico, os desenvolvedores podem analisar as discussões relacionadas e ter uma visão mais ampla.

Por que usar o git blame?

Você pode saber mais em nosso tutorial do Git e do GitHub, que serve como um guia para iniciantes, explicando o funcionamento do controle de versão do Git e destacando sua função crucial em projetos de ciência de dados.

Uso básico do git blame

A sintaxe básica do git blame é:

git blame <file>

Esse comando anota cada linha com o último commit que a modificou, incluindo o autor, o registro de data e hora e o hash do commit. Aqui está um exemplo:

$ git blame example.py
derrickmwiti@Derricks-MacBook-Pro remixer % git blame src/components/ContentGenerator.vue
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    1) <template>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    2)   <div class="content-generator">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    3)     <div class="card h-100 border-0 shadow-sm">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    4)       <div class="card-header bg-white border-bottom-0 pt-4">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    5)         <div class="d-flex justify-content-between align-items-center mb-3">
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300    6)           <div class="d-flex align-items-center gap-2">
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300    7)             <h5 class="mb-0">Content Generator</h5>
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300    8)             <span class="badge bg-secondary" v-if="openaiModel">{{ openaiModel }}</span>
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300    9)           </div>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300   10)         </div>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300   11) 
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300   12) 
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300   13)         <nav>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300   14)           <div class="nav nav-tabs card-header-tabs gap-1" id="nav-tab" role="tablist">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300   15)             <button
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300   16)               v-for="platform in platforms"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300   17)               :key="platform"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300   18)               class="nav-link"

Cada linha contém:

  • O hash de confirmação (^3b1aef2 e ^8f2c4d3)
  • O nome do autor (Derrick Mwiti)
  • O registro de data e hora da última modificação
  • A linha de código real

Aplicações práticas do Git Blame

Agora que você entende a sintaxe básica do git blame, vamos ver como você pode aplicá-la em cenários de desenvolvimento cotidiano.

Encontrar o autor de uma linha específica

Se um arquivo for grande e você só precisar inspecionar uma determinada parte, especifique um intervalo de linhas:

derrickmwiti@Derricks-MacBook-Pro remixer % git blame -L 10,20  src/components/ContentGenerator.vue
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 10)         </div>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 11) 
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 12) 
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 13)         <nav>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 14)           <div class="nav nav-tabs card-header-tabs gap-1" id="nav-tab" role="tablist">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 15)             <button
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 16)               v-for="platform in platforms"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 17)               :key="platform"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 18)               class="nav-link"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 19)               :class="{ active: activeTab === platform }"
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300 20)               :id="nav-${platform}-tab"

Isso se concentra nas linhas 10 a 20, facilitando a localização de alterações relevantes.

Entendendo as alterações usando o git show

Embora o site git blame destaque a última alteração em cada linha, ele não explica o que foi modificado nesse commit. Para ver mais detalhes, use git show :

derrickmwiti@Derricks-MacBook-Pro remixer % git show  28203e0
commit 28203e0f7cbe92c6baf6897a54686e87d16c9cda
Author: Derrick Mwiti <mwitiderrick@gmail.com>
Date:   Mon Mar 10 17:48:31 2025 +0300


diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..5a5809d
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,9 @@
+[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue,css,scss,sass,less,styl}]
+charset = utf-8
+indent_size = 2
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+end_of_line = lf
+max_line_length = 100
diff --git a/.env b/.env
:

Se você substituir pelo ID real do commit de git blame, verá a mensagem completa do commit e a diferença de código, o que ajudará a entender o motivo da alteração.

Para saber mais sobre isso, explore nosso Tutorial do Git Diff para que você saiba como usar o git diff para rastrear alterações de código de forma eficaz, desde comparações básicas até técnicas avançadas.

Recursos avançados do Git Blame

Aqui estão algumas das maneiras mais complexas pelas quais você pode utilizar o Git blame em um fluxo de trabalho: 

Ignorando alterações de espaço em branco

Algumas alterações de formatação, como a correção do recuo, não afetam a lógica. Para filtrá-los, use git blame -w :

derrickmwiti@Derricks-MacBook-Pro remixer % git blame -w src/components/ContentGenerator.vue       
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    1) <template>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    2)   <div class="content-generator">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    3)     <div class="card h-100 border-0 shadow-sm">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    4)       <div class="card-header bg-white border-bottom-0

Ignorar revisões específicas

Se determinados commits (como a reformatação em massa) atrapalharem o histórico de culpa, eles poderão ser ignorados com git blame --ignore-rev :

derrickmwiti@Derricks-MacBook-Pro remixer % git blame --ignore-rev 28203e0 src/components/ContentGenerator.vue 
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    1) <template>
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    2)   <div class="content-generator">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    3)     <div class="card h-100 border-0 shadow-sm">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    4)       <div class="card-header bg-white border-bottom-0 pt-4">
^28203e0 (Derrick Mwiti 2025-03-10 17:48:31 +0300    5)         <div class="d-flex justify-content-between align-items-center mb-3">
289030a0 (Derrick Mwiti 2025-03-11 12:47:11 +0300    6)           <div class="d-flex align-items-center gap-2">

Para ignorar vários commits de forma consistente, você pode listá-los em um arquivo e fazer referência a ele usando a opção --ignore-revs-file. Isso ajuda a manter um histórico de culpa limpo, excluindo alterações irrelevantes.

No diretório raiz do seu repositório, crie um arquivo chamado .git-blame-ignore-revs. Liste os hashes do commit a serem ignorados, opcionalmente adicionando comentários para maior clareza:

# Commit introducing code formatting changes
a926bba49c89a5b882cd298be3af2570b1e6252c

Execute o seguinte comando para ignorar as revisões especificadas.

git blame --ignore-revs-file .git-blame-ignore-revs filename

Execute o seguinte comando para instruir o Git a usar seu arquivo ignore por padrão:

git config blame.ignoreRevsFile .git-blame-ignore-revs

Exibição de e-mails de autores em vez de nomes

Para exibir o e-mail do autor em vez de seu nome:

derrickmwiti@Derricks-MacBook-Pro remixer % git blame --show-email  src/components/PostsManager.vue
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300   1) <template>
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300   2)   <div class="posts-manager">
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300   3)     <h3>Saved Posts</h3>
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300   4)     
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300   5)     <div v-if="loading" class="text-center my-4">
dbe547ec (<derrick@gmail.com> 2025-03-11 09:22:59 +0300   6)       <div class="spinner-border text-primary" role="status">

Isso pode ser útil para entrar em contato com a pessoa responsável por uma alteração específica.

Exibindo os hashes completos do commit

Por padrão, o site git blame mostra hashes de confirmação curtos. Para ver os hashes completos, execute:

derrickmwiti@Derricks-MacBook-Pro remixer % git blame --abbrev=40 src/components/PostsManager.vue
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300   1) <template>
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300   2)   <div class="posts-manager">
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300   3)     <h3>Saved Posts</h3>
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300   4)     
dbe547ec4ece7cb2a1ff3dadb4770cc9ee9f161e (Derrick Mwiti 2025-03-11 09:22:59 +0300   5)     <div v-if="loading" class="text-center my-4">

Você pode ajustar o tamanho das abreviações de culpa do Git usando a opção --abbrev=.

Usando o git blame no Visual Studio Code

Para os desenvolvedores que usam o Visual Studio Code, a extensão Git Blame oferece suporte integrado para git blame

Essa extensão permite que os usuários:

  • Exibir anotações de culpa em linha.
  • Passe o mouse sobre as linhas para ver os detalhes do commit.
  • Acesse o histórico completo de arquivos e linhas.

Práticas recomendadas do Git Blame

Ao manter um arquivo .git-blame-ignore-revs, você garante que os commits de formatação não atrapalhem o histórico de culpa. Ao trabalhar em equipe, é útil que todos sigam as mesmas convenções para ignorar as revisões.

Ao usar o site git blame, o objetivo deve ser sempre entender o raciocínio por trás das mudanças, não atribuir culpa. É uma ferramenta para aprender e melhorar a colaboração, ajudando os desenvolvedores a trabalharem juntos com mais eficiência.

Ciclo de colaboração do Git Blame

Conclusão 

Neste artigo, abordamos como o git blame pode ajudar os desenvolvedores a rastrear as alterações em seu código. Desde o uso básico até os recursos avançados, exploramos como esse comando fornece clareza sobre quem modificou um arquivo e quando.

Você pode otimizar esse comando integrando-o a outras ferramentas do Git, como git show e configurando revisões ignoradas. Se você estiver depurando um problema, revisando alterações ou simplesmente compreendendo o histórico de um arquivo, o git blame oferece informações valiosas que melhoram a manutenção e a colaboração do código.

Dominar ferramentas como git blame ajuda você a navegar em bases de código com confiança, colaborar com mais eficiência e manter históricos de projetos mais limpos. Não se trata apenas de descobrir quem mudou uma linha - mas por que- e usar esse insight para criar um software melhor. Para se aprofundar no ecossistema do Git, confira nosso curso abrangente sobre Git. ou mergulhe em nosso Curso de Git para usuários intermediários.

Perguntas frequentes sobre o Git Blame

Como posso ignorar alterações de espaço em branco no git blame?

Você pode usar a opção -w para ignorar alterações que envolvam apenas espaços em branco, como ajustes de recuo ou espaçamento.

Como faço para encontrar os detalhes do commit de uma alteração específica no git blame?

Depois de identificar um hash de confirmação do git blame, use o git show para ver os detalhes da confirmação, incluindo as alterações feitas.

Como posso excluir determinados commits dos resultados do git blame?

Se você quiser ignorar commits específicos (por exemplo, alterações na formatação do código), use:

git blame --ignore-rev  

Para vários commits ignorados, armazene-os em um arquivo .git-blame-ignore-revs e execute:

git blame --ignore-revs-file .git-blame-ignore-revs 

Existe uma maneira de usar o git blame no Visual Studio Code?

Sim, a extensão Git Blame no VS Code fornece anotações de culpa em linha, histórico de confirmação e insights detalhados. Você pode ativar ou personalizar as anotações de culpa por meio de suas configurações.

Tópicos

Principais cursos da DataCamp

Curso

Introduction to GitHub Concepts

2 h
26K
Learn how to use GitHub's various features, navigate the interface and perform everyday collaborative tasks.
Ver detalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado
Git

blog

O que é Git? Manual completo do Git

Saiba mais sobre o sistema de controle de versão mais conhecido e por que é uma ferramenta de colaboração indispensável para cientistas de dados e programadores.
Summer Worsley's photo

Summer Worsley

14 min

Tutorial

Tutorial do GitHub e do Git para iniciantes

Um tutorial para iniciantes que demonstra como funciona o controle de versão do Git e por que ele é crucial para projetos de ciência de dados.
Abid Ali Awan's photo

Abid Ali Awan

9 min

Tutorial

Git Rename Branch: Como renomear uma filial local ou remota

Saiba como renomear ramificações locais e remotas do Git usando o terminal ou a interface gráfica do usuário (GUI) de clientes populares como o GitHub.

Tutorial

Git Prune: O que é o Git Pruning e como usar o Git Prune

O Git prune é um comando do Git que remove objetos do repositório que não são mais acessíveis a partir de qualquer commit ou branch, ajudando a liberar espaço em disco.

Tutorial

Git Pull Force: Como substituir uma ramificação local por uma remota

Saiba por que o git pull --force não é a melhor maneira de substituir uma ramificação local pela versão remota e descubra o método adequado usando git fetch e git reset.

Tutorial

Tutorial de push e pull do GIT

Saiba como realizar solicitações Git PUSH e PULL por meio do GitHub Desktop e da linha de comando.

Olivia Smith

13 min

Ver maisVer mais