Como Verificar se um Arquivo Teve Alterações no Git

GitBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como verificar as alterações em seu repositório Git. Exploraremos os comandos Git essenciais git status e git diff para identificar arquivos modificados e inspecionar as alterações específicas feitas neles.

Através de exercícios práticos, você praticará o uso de git status para ver quais arquivos foram alterados e git diff para visualizar as diferenças linha por linha entre o estado atual de seus arquivos e a última versão commitada. Você também aprenderá como o Git indica arquivos que não foram alterados.

Executar git status para Ver Arquivos Modificados

Nesta etapa, aprenderemos como usar git status para ver quais alterações fizemos em nosso projeto.

Primeiro, vamos garantir que estamos no diretório do nosso projeto. Abra seu terminal e digite:

cd ~/project/my-time-machine

Agora, vamos criar um novo arquivo. Adicionaremos uma linha simples ao nosso arquivo message.txt:

echo "P.S. Hope you're doing well!" >> message.txt

O símbolo >> anexa o texto ao arquivo existente, em vez de sobrescrevê-lo.

Vamos verificar o conteúdo do arquivo para confirmar a alteração:

cat message.txt

Você deve ver:

Hello, Future Me
P.S. Hope you're doing well!

Agora, vamos ver como o Git vê essa alteração. Execute o comando git status:

git status

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

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 nos diz que message.txt foi "modificado" (modified). Isso significa que o Git sabe que o arquivo foi alterado desde o último commit, mas as alterações ainda não foram adicionadas à área de staging.

Compreender git status é crucial porque ele informa o estado atual do seu diretório de trabalho e da área de staging. É sua principal ferramenta para saber quais alterações você fez e o que está pronto para ser commitado.

Usar git diff para Inspecionar as Alterações

Na etapa anterior, vimos que git status nos informa quais arquivos foram modificados. Mas e se quisermos ver exatamente quais alterações foram feitas? É aí que git diff entra em ação!

git diff mostra as diferenças entre seu diretório de trabalho e o último commit (ou a área de staging, dependendo de como você o usa). É como comparar a versão atual do seu arquivo com a versão no seu último ponto de salvamento.

Vamos experimentar. Certifique-se de ainda estar no diretório ~/project/my-time-machine e execute:

git diff

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

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

Vamos analisar essa saída:

  • diff --git a/message.txt b/message.txt: Esta linha nos diz que o Git está comparando duas versões do arquivo message.txt.
  • index a1b2c3d..e4f5g6h 100644: Esta é informação técnica sobre as versões do arquivo.
  • --- a/message.txt: Isso indica a versão original do arquivo (antes de suas alterações).
  • +++ b/message.txt: Isso indica a nova versão do arquivo (com suas alterações).
  • @@ -1 +1,2 @@: Isso é chamado de "hunk header" (cabeçalho de bloco). Ele informa onde as alterações estão localizadas no arquivo. -1 significa que uma linha foi removida começando na linha 1 (no arquivo original), e +1,2 significa que duas linhas estão presentes começando na linha 1 (no novo arquivo).
  • +P.S. Hope you're doing well!: Linhas começando com + indicam linhas que foram adicionadas. Se você tivesse excluído uma linha, ela começaria com -.

git diff é uma ferramenta incrivelmente poderosa. Antes de commitar suas alterações, é sempre uma boa ideia executar git diff para revisar exatamente o que você está prestes a salvar. Isso ajuda a evitar a commit acidental de alterações indesejadas.

Pressione q para sair da visualização de diff e retornar à linha de comando.

Testar Arquivos Não Alterados

Nas etapas anteriores, vimos como git status e git diff funcionam quando um arquivo foi modificado. Mas o que acontece se executarmos esses comandos quando não houver alterações?

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

Primeiro, execute git status:

git status

Como não fizemos nenhuma alteração desde a última vez que verificamos o status, você deve ver a mesma saída de antes, indicando que message.txt foi modificado, mas não está staged:

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")

Agora, vamos tentar executar git diff novamente:

git diff

Você deve ver a mesma saída de diff de antes, mostrando a diferença entre o arquivo atual e o último commit:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

Isso confirma que git status e git diff mostram o estado atual do seu diretório de trabalho em relação ao último commit, independentemente de quantas vezes você executar os comandos sem fazer mais alterações.

Agora, vamos fazer o stage das alterações que fizemos em message.txt usando git add:

git add message.txt

Execute git status novamente:

git status

A saída mudará para mostrar que as alterações agora estão staged:

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

Observe que git status agora mostra "Changes to be committed" (Alterações a serem commitadas). Isso significa que as alterações estão na área de staging, prontas para o próximo commit.

E quanto a git diff agora? Vamos tentar:

git diff

Desta vez, git diff não mostrará nenhuma saída. Por quê? Porque quando você executa git diff sem nenhum argumento, ele compara seu diretório de trabalho com a área de staging. Como acabamos de adicionar as alterações à área de staging, o diretório de trabalho e a área de staging são idênticos.

Para ver a diferença entre a área de staging e o último commit, você usaria git diff --staged. Vamos tentar isso:

git diff --staged

Isso mostrará o diff das alterações que estão atualmente na área de staging, que é a linha que adicionamos:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

Compreender a diferença entre git diff (diretório de trabalho vs. área de staging) e git diff --staged (área de staging vs. último commit) é um conceito-chave no Git. Isso ajuda você a gerenciar suas alterações antes de commitá-las.

Pressione q para sair da visualização de diff, se ela aparecer.

Resumo

Neste laboratório, aprendemos como verificar as alterações em um repositório Git. Começamos usando git status para identificar quais arquivos foram modificados no diretório de trabalho desde o último commit. Este comando fornece um resumo do estado atual do repositório, indicando arquivos modificados, staged e não rastreados.

Em seguida, exploramos git diff para inspecionar as alterações específicas feitas dentro de um arquivo modificado. Este comando mostra uma comparação linha a linha entre a versão atual do arquivo no diretório de trabalho e a versão no último commit, destacando adições e exclusões. Finalmente, confirmamos que git status relata corretamente que não há alterações quando nenhuma modificação foi feita nos arquivos no repositório.