Como Verificar se um Arquivo foi Renomeado no Histórico do Git

GitBeginner
Pratique Agora

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.