Git: identificando autoria de alterações com git blame
Gabarito: letra D. O comando git blame <arquivo> exibe, linha por linha, o autor e o hash do commit responsável pela última alteração de cada linha do arquivo — exatamente o que o analista precisa para entender o histórico e a autoria das modificações. Os demais comandos têm finalidades distintas: git stash guarda alterações temporariamente, git fetch baixa referências do repositório remoto, git show exibe detalhes de um objeto (commit, tag, etc.) e git status mostra o estado do diretório de trabalho e da área de preparo.
O Git é um sistema de controle de versão distribuído que trata os dados como um conjunto de imagens (snapshots) do sistema de arquivos. Cada commit recebe um identificador único (SHA-1) e armazena o autor, a data e a mensagem da alteração. O comando git blame é a ferramenta específica para rastrear a autoria de cada linha de um arquivo: ele percorre o histórico e associa cada linha ao commit que a introduziu ou modificou pela última vez. Na prática, o analista executaria git blame arquivo.txt e veria, para cada linha, o hash abreviado do commit, o autor, a data e o conteúdo da linha. Isso é fundamental para auditoria de código, revisão de alterações e entendimento da evolução do projeto.
A banca explora a confusão entre comandos que parecem relacionados, mas têm propósitos bem distintos. O git show é um dos mais confundidos com o git blame, pois ambos exibem informações do histórico; porém, git show mostra o conteúdo de um objeto específico (como um commit ou uma tag), não a autoria linha a linha de um arquivo. Já o git log (não listado nas alternativas) mostra o histórico de commits, mas sem o detalhamento por linha. O git status apenas informa quais arquivos foram modificados, adicionados ou removidos, sem qualquer informação de autoria. O git fetch atualiza as referências do repositório remoto, e o git stash guarda alterações não commitadas para uso posterior.
Para fixar, veja a função de cada comando:
Comando | Função principal |
|---|
git blame <arquivo>
| Mostra autor e commit de cada linha do arquivo |
git show <objeto>
| Exibe detalhes de um commit, tag ou árvore |
git status
| Mostra o estado do diretório de trabalho e da área de preparo |
git fetch
| Baixa referências do repositório remoto sem mesclar |
git stash
| Guarda temporariamente alterações não commitadas |
Guarde a fronteira entre git blame (autoria por linha) e git show (conteúdo de um objeto): é exatamente nela que as alternativas se dividem.
Alternativa A — ❌ Incorreta
git stash <arquivo> não existe como sintaxe padrão; o comando correto é git stash (sem argumento) ou git stash push <arquivo>. Sua função é guardar temporariamente alterações não commitadas, permitindo que o desenvolvedor mude de branch ou limpe o diretório de trabalho sem perder o trabalho em andamento. Não fornece nenhuma informação sobre autoria de linhas.
Alternativa B — ❌ Incorreta
git fetch <arquivo> não é um uso válido: git fetch é usado para baixar commits, branches e tags do repositório remoto para o repositório local, sem mesclá-los automaticamente. Não tem relação com a análise de autoria de linhas de um arquivo específico.
Alternativa C — ❌ Incorreta
git show <arquivo> não é a forma correta de usar o comando. git show é utilizado para exibir detalhes de um objeto do Git, como um commit (mostrando o diff e metadados), uma tag ou uma árvore. Para um arquivo, o comando adequado seria git show <commit>:<arquivo> para ver o conteúdo em um commit específico, mas isso não mostra a autoria linha a linha. O comando que atende ao requisito do enunciado é o git blame.
Alternativa D — ✅ Correta ⟵ GABARITO
git blame <arquivo> é o comando que mostra, para cada linha do arquivo, o hash do commit que a alterou pela última vez, o autor, a data e o conteúdo da linha. É a ferramenta ideal para identificar quem alterou cada linha e em qual commit, conforme o enunciado. Exemplo: git blame src/main.java exibe uma tabela com essas informações.
Alternativa E — ❌ Incorreta
git status <arquivo> mostra o estado do arquivo no diretório de trabalho e na área de preparo (modificado, adicionado, etc.), mas não fornece informações sobre autoria ou commits. É um comando de consulta de estado, não de histórico.
Gabarito: letra D