Introdução
Neste laboratório, você aprenderá como verificar se um arquivo específico foi modificado em um commit (commit) específico do Git. Exploraremos diferentes comandos Git para alcançar esse objetivo.
Você começará usando o comando git show --name-only para visualizar os arquivos alterados em um commit. Em seguida, aprenderá como usar git diff-tree para examinar as alterações de arquivos entre commits. Finalmente, você testará esses métodos com arquivos não modificados para confirmar seu comportamento.
Usando git show --name-only para um Commit
Nesta etapa, aprenderemos como usar o comando git show para obter mais detalhes sobre um commit específico. Enquanto git log nos mostra um resumo dos commits, git show nos permite espiar dentro de uma única cápsula do tempo.
Vamos usar git show para ver os detalhes do nosso primeiro commit. Também adicionaremos a opção --name-only para ver apenas os nomes dos arquivos que foram alterados nesse commit.
Primeiro, certifique-se de estar no seu diretório my-time-machine:
cd ~/project/my-time-machine
Agora, execute o comando git show com a opção --name-only. Você pode usar HEAD para se referir ao commit mais recente:
git show --name-only HEAD
Você deve ver uma saída semelhante a esta:
commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Jane Doe <jane.doe@example.com>
Date: Mon Aug 7 10:00:00 2023 +0000
Send a message to the future
message.txt
Vamos analisar a saída:
- A primeira parte é semelhante ao que você viu com
git log, mostrando os detalhes do commit (ID do commit, autor, data e mensagem). - A última linha,
message.txt, é a saída da opção--name-only. Ela nos diz que o arquivomessage.txtfoi alterado neste commit.
O comando git show é incrivelmente útil para inspecionar commits individuais. Você pode usá-lo para ver exatamente quais alterações foram feitas em um commit específico, quais arquivos foram afetados e a mensagem do commit associada a essas alterações. Isso ajuda você a entender o histórico do seu projeto em detalhes.
Na próxima etapa, exploraremos outra maneira de ver as alterações de arquivos entre commits usando git diff-tree.
Executar git diff-tree para Alterações de Arquivos
Nesta etapa, exploraremos outro comando para ver quais arquivos foram alterados em um commit: git diff-tree. Este comando é frequentemente usado em scripting e automação, mas também é útil para entender como o Git rastreia as alterações.
Certifique-se de ainda estar no diretório ~/project/my-time-machine.
Precisamos do ID do commit do nosso primeiro commit. Você pode obtê-lo executando git log --oneline:
git log --oneline
Você deve ver uma saída como esta (seu ID do commit será diferente):
a1b2c3d (HEAD -> master) Send a message to the future
Copie os primeiros 7 caracteres do ID do commit (por exemplo, a1b2c3d).
Agora, execute o comando git diff-tree. Usaremos a opção -r para mostrar as alterações recursivamente e a opção --name-only para mostrar apenas os nomes dos arquivos. Substitua YOUR_COMMIT_ID pelo ID do commit que você copiou:
git diff-tree -r --name-only YOUR_COMMIT_ID
Por exemplo, se seu ID do commit fosse a1b2c3d, você executaria:
git diff-tree -r --name-only a1b2c3d
Você deve ver uma saída como esta:
message.txt
Este comando também nos mostra que message.txt foi o arquivo alterado nesse commit.
Embora git show --name-only seja frequentemente mais conveniente para uso interativo, git diff-tree é um comando poderoso para comparar árvores (snapshots do seu projeto) e é frequentemente usado em fluxos de trabalho e scripts Git mais avançados. Entender que o Git rastreia as alterações entre esses snapshots é fundamental para dominar o controle de versão.
Testar Arquivos Não Modificados
Nesta etapa final, confirmaremos que o Git identifica corretamente os arquivos que não foram modificados desde o último commit. Isso reforça o conceito de que o Git rastreia apenas as alterações.
Certifique-se de estar no diretório ~/project/my-time-machine.
Execute o comando git status novamente:
git status
Você deve ver uma saída como esta:
On branch master
nothing to commit, working tree clean
Esta mensagem nos diz que não há alterações em nosso diretório de trabalho que precisem ser commitadas. O Git vê que o arquivo message.txt é exatamente o mesmo que era no último commit.
Agora, vamos criar um novo arquivo não rastreado para ver como o Git reage:
echo "This is a temporary file" > temp.txt
Execute git status novamente:
git status
Você deve ver agora:
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
temp.txt
nothing added to commit but untracked files present (use "git add" to track)
O Git identifica corretamente temp.txt como um arquivo não rastreado porque ainda não dissemos ao Git para rastreá-lo usando git add. Isso demonstra que o Git está ciente dos arquivos em seu diretório, mas rastreia ativamente apenas aqueles que você adicionou ao repositório.
Finalmente, vamos limpar o arquivo temporário:
rm temp.txt
Execute git status pela última vez:
git status
Você deve voltar ao estado "nothing to commit, working tree clean".
Esta etapa destaca como o Git ajuda você a gerenciar seu projeto, mostrando claramente quais arquivos foram modificados, quais estão preparados (staged) para o próximo commit e quais não estão rastreados. Essa informação clara de status é crucial para um controle de versão eficaz.
Resumo
Neste laboratório, aprendemos como verificar se um arquivo foi modificado em um commit específico usando Git. Começamos usando o comando git show --name-only para visualizar os detalhes de um commit e listar apenas os nomes dos arquivos que foram alterados. Isso forneceu uma maneira rápida de ver quais arquivos foram afetados por um commit específico.
Em seguida, exploramos o comando git diff-tree como outro método para identificar as alterações de arquivos dentro de um commit. Embora frequentemente usado em scripting, entender git diff-tree ajuda a compreender como o Git rastreia as modificações. Esses comandos são ferramentas valiosas para inspecionar o histórico de um projeto e entender as alterações introduzidas em commits individuais.



