Introdução
Neste laboratório, você aprenderá como rastrear efetivamente o histórico de um arquivo no Git, mesmo após ele ter sido renomeado. Exploraremos o poderoso comando git log --follow para acompanhar o histórico de um arquivo através de mudanças de nome.
Você também aprenderá como usar git diff --name-status para examinar o status dos arquivos entre os commits e, finalmente, testaremos essas técnicas em arquivos que não foram renomeados para entender a diferença na saída.
Executar git log --follow -- Arquivo
Nesta etapa, exploraremos como rastrear o histórico de um arquivo específico, mesmo que ele tenha sido renomeado. É aqui que o comando git log --follow se torna útil.
Primeiro, vamos garantir que estamos no diretório do nosso projeto.
cd ~/project/my-time-machine
Agora, vamos criar um novo arquivo e adicionar algum conteúdo.
echo "This is the original content." > original_file.txt
Adicione e faça o commit deste arquivo.
git add original_file.txt
git commit -m "Add original file"
Você deve ver uma saída semelhante a esta:
[master 1a2b3c4] Add original file
1 file changed, 1 insertion(+)
create mode 100644 original_file.txt
Agora, vamos renomear o arquivo.
git mv original_file.txt renamed_file.txt
Verifique o status para ver a mudança.
git status
Você deve ver algo como isto:
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: original_file.txt -> renamed_file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
message.txt
Faça o commit da renomeação.
git commit -m "Rename original file"
Você deve ver uma saída semelhante a esta:
[master 5d6e7f8] Rename original file
1 file changed, 0 insertions(+), 0 deletions(-)
rename original_file.txt -> renamed_file.txt (100%)
Agora, vamos usar git log para ver o histórico do arquivo renomeado.
git log renamed_file.txt
Isso mostrará apenas o commit onde o arquivo foi renomeado. Para ver o histórico antes da renomeação, precisamos usar a opção --follow.
git log --follow renamed_file.txt
Este comando mostrará o histórico do arquivo, acompanhando suas mudanças de nome. Você deve ver tanto o commit "Rename original file" quanto o commit "Add original file".
O comando git log --follow é essencial quando você precisa entender o histórico completo de um arquivo que foi movido ou renomeado dentro do seu repositório. Ele ajuda você a rastrear a evolução do arquivo em diferentes commits, independentemente do seu nome atual.
Usar git diff --name-status
Nesta etapa, aprenderemos como usar git diff --name-status para ver um resumo das mudanças entre os commits, focando especificamente no status e nos nomes dos arquivos que foram alterados.
Primeiro, certifique-se de estar no diretório correto:
cd ~/project/my-time-machine
Vamos fazer outra alteração em nosso renamed_file.txt.
echo "Adding a new line." >> renamed_file.txt
Agora, vamos ver o status.
git status
Você deve ver que renamed_file.txt foi modificado.
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: renamed_file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
message.txt
no changes added to commit (use "git add" and/or "git commit -a")
Adicione a alteração à área de staging.
git add renamed_file.txt
Agora, vamos usar git diff --name-status para ver as alterações entre o último commit e as alterações em staging.
git diff --name-status --cached
A opção --cached diz ao git diff para comparar as alterações em staging (o índice) com o último commit (HEAD).
Você deve ver uma saída semelhante a esta:
M renamed_file.txt
A saída M renamed_file.txt indica que o arquivo renamed_file.txt foi Modificado.
Agora, vamos commitar essa alteração.
git commit -m "Add new line to renamed file"
Você deve ver uma saída semelhante a esta:
[master 9h0i1j2] Add new line to renamed file
1 file changed, 1 insertion(+)
O comando git diff --name-status é muito útil para obter uma visão geral rápida de que tipo de alterações (adicionadas, modificadas, excluídas, renomeadas, copiadas) ocorreram entre diferentes pontos no seu histórico do Git, sem mostrar o conteúdo completo das alterações. Isso é particularmente útil ao revisar as alterações antes de commitar ou ao comparar branches.
Testar Arquivos Não Renomeados
Nesta etapa, observaremos como git log --follow se comporta com arquivos que não foram renomeados. Isso ajudará a solidificar sua compreensão de quando --follow é necessário.
Primeiro, certifique-se de estar no diretório correto:
cd ~/project/my-time-machine
Já temos renamed_file.txt e message.txt em nosso repositório. Vamos adicionar algum conteúdo a message.txt.
echo "This is a message." >> message.txt
Verifique o status.
git status
Você deve ver que message.txt foi modificado e renamed_file.txt está atualizado.
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: message.txt
no changes added to commit (use "git add" and/or "git commit -a")
Adicione e faça o commit da alteração em message.txt.
git add message.txt
git commit -m "Add content to message file"
Você deve ver uma saída semelhante a esta:
[master 3k4l5m6] Add content to message file
1 file changed, 1 insertion(+)
Agora, vamos usar git log em message.txt.
git log message.txt
Isso mostrará o histórico de message.txt. Você deve ver o commit "Add content to message file" e o commit inicial onde message.txt foi criado (do primeiro laboratório).
Agora, vamos tentar git log --follow em message.txt.
git log --follow message.txt
Você notará que a saída é a mesma que git log message.txt. Isso ocorre porque message.txt não foi renomeado ou movido. A opção --follow é projetada especificamente para rastrear o histórico de arquivos em mudanças de nome. Para arquivos que não foram renomeados, git log é suficiente.
Esta etapa demonstra que, embora git log --follow seja poderoso para rastrear arquivos renomeados, para arquivos que mantêm seu nome, o comando git log padrão fornece o histórico completo. Compreender essa distinção ajuda você a escolher o comando certo para a tarefa.
Resumo
Neste laboratório, aprendemos como rastrear o histórico de um arquivo no Git, mesmo após ele ter sido renomeado. Começamos criando, adicionando e committando um arquivo, depois o renomeamos usando git mv e committamos a renomeação. Em seguida, demonstramos que um simples git log no novo nome de arquivo mostra apenas o histórico a partir da renomeação.
A principal conclusão foi o uso do comando git log --follow <filename>. Essa opção poderosa permite que o Git rastreie o histórico de um arquivo em mudanças de nome, fornecendo uma visão completa de sua evolução desde a criação até seu estado atual. Isso é crucial para entender o contexto completo das modificações de um arquivo dentro do histórico de um projeto.



