Como Verificar se um Arquivo Foi Adicionado em um Commit Git

GitBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar se um arquivo foi adicionado em um commit específico do Git. Você explorará diferentes comandos Git para inspecionar os detalhes do commit e identificar arquivos recém-adicionados.

Você começará usando git show --name-status para visualizar um resumo conciso das alterações em um commit, procurando especificamente o status 'A' que indica um arquivo adicionado. Em seguida, você aprenderá como usar git diff-tree com opções relevantes para obter um resultado semelhante, o que é particularmente útil para scripting e cenários avançados. Finalmente, você diferenciará entre arquivos modificados e adicionados dentro do histórico de commits.

Executar git show --name-status

Nesta etapa, exploraremos como visualizar os detalhes de um commit específico, incluindo quais arquivos foram alterados e como. Usaremos o comando git show com a opção --name-status.

Primeiro, certifique-se de estar no seu diretório my-time-machine:

cd ~/project/my-time-machine

Agora, vamos usar git show para analisar o commit que fizemos no laboratório anterior. Podemos usar o alias HEAD para nos referir ao commit mais recente:

git show --name-status 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

A       message.txt

Vamos analisar esta saída:

  • A primeira parte mostra os detalhes do commit, semelhante ao que você viu com git log.
  • A linha A message.txt é a parte importante aqui.
    • A significa "Adicionado" (Added). Isso nos diz que o arquivo message.txt foi adicionado neste commit.
    • message.txt é o nome do arquivo que foi afetado.

A opção --name-status é muito útil porque fornece um resumo conciso das alterações introduzidas por um commit, mostrando apenas os nomes dos arquivos e seus status (Adicionado, Modificado, Excluído, etc.). Isso é mais rápido do que olhar para o diff completo se você só quiser saber quais arquivos foram envolvidos.

Compreender como inspecionar commits é crucial para navegar no histórico do seu projeto e entender como ele evoluiu.

Usar git diff-tree para Arquivos Adicionados

Nesta etapa, usaremos outro comando, git diff-tree, para ver as alterações introduzidas por um commit. Embora git show seja ótimo para ver os detalhes completos do commit e o diff, git diff-tree é útil para scripting e cenários mais avançados.

Certifique-se de ainda estar no diretório ~/project/my-time-machine.

Usaremos git diff-tree com as opções -r (recursivo) e --name-status, seguido pelo hash do commit. Você pode obter o hash do commit na saída de git log ou git show. Para nosso primeiro commit, também podemos usar HEAD.

git diff-tree -r --name-status HEAD

Você deve ver uma saída semelhante a esta:

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 A       message.txt

Vamos analisar a saída:

  • a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 é o hash do commit.
  • A indica o status da alteração do arquivo (Adicionado).
  • message.txt é o nome do arquivo.

Esta saída é muito semelhante à parte --name-status de git show. Para um commit simples como o nosso primeiro (que só adicionou um arquivo), a saída é quase idêntica. No entanto, git diff-tree é mais flexível e pode ser usado para comparar diferentes árvores (snapshots) em seu repositório, não apenas commits.

Por enquanto, a principal conclusão é que tanto git show --name-status quanto git diff-tree -r --name-status podem mostrar quais arquivos foram alterados e como em um determinado commit. Esta é uma habilidade fundamental para entender o histórico do seu projeto.

Testar Arquivos Modificados vs Adicionados

Nas etapas anteriores, vimos como git show --name-status e git diff-tree --name-status mostram um A para um arquivo adicionado. Agora, vamos ver como eles se comportam quando um arquivo é modificado.

Primeiro, certifique-se de estar no diretório ~/project/my-time-machine.

Vamos adicionar outra linha ao nosso arquivo message.txt:

echo "Hello again, Future Me" >> message.txt

O operador >> anexa o texto ao arquivo existente.

Agora, vamos verificar o status do nosso repositório:

git status

Você deve ver uma saída indicando que message.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:   message.txt

no changes added to commit (use "git add" and/or "git commit -a")

O Git identifica corretamente que o arquivo foi modificado.

Agora, vamos preparar essa alteração:

git add message.txt

E verificar o status novamente:

git status

A saída agora deve mostrar que a alteração está preparada:

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   message.txt

Observe que, embora tenhamos adicionado conteúdo, o Git rastreia isso como um arquivo modificado porque o arquivo já existia no commit anterior.

Finalmente, vamos confirmar essa alteração:

git commit -m "Add another message to the future"

Você deve ver uma saída confirmando o commit:

[master a1b2c3d] Add another message to the future
 1 file changed, 1 insertion(+)

Agora temos um novo commit. Vamos usar git show --name-status no commit mais recente (HEAD) para ver o status:

git show --name-status HEAD

A saída será semelhante a esta:

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Jane Doe <jane.doe@example.com>
Date:   Mon Aug 7 10:05:00 2023 +0000

    Add another message to the future

M       message.txt

Observe o M antes de message.txt. Isso indica que o arquivo foi Modificado neste commit.

Da mesma forma, se você usar git diff-tree -r --name-status HEAD, também verá o status M.

Essa distinção entre A (Adicionado) e M (Modificado) é importante para entender o histórico de seus arquivos no Git. A significa que o arquivo foi criado naquele commit, enquanto M significa que o arquivo existia antes e seu conteúdo foi alterado.

Resumo

Neste laboratório, aprendemos como verificar se um arquivo foi adicionado em um commit do Git. Primeiro, exploramos o comando git show --name-status, que fornece um resumo conciso das alterações em um commit, incluindo o status (como 'A' para Adicionado) e o nome dos arquivos afetados. Esta é uma maneira rápida de ver quais arquivos foram envolvidos em um commit sem visualizar o diff completo.

Em seguida, introduzimos o comando git diff-tree com as opções -r e --name-status como um método alternativo para inspecionar as alterações do commit, particularmente útil para scripting e cenários avançados. Embora os detalhes completos desta etapa não tenham sido fornecidos, a introdução indica que seu objetivo é explorar mais a fundo como identificar arquivos adicionados dentro de um commit usando um comando Git diferente.