Comparando o diretório de trabalho com o repositório
Imagine que você está trabalhando no seu hello.html e um gato levado passa correndo pelo teclado, adicionando um monte de coisa sem sentido ao arquivo. Você foi de um Hello, World! caprichado para uma página cheia de gatês.
Certo, mais uma vez: finja que você é um gato tentando dormir em cima do teclado. Abra o hello.html e aperte teclas aleatórias para fazer algumas alterações (daqui a pouco vamos ver como lidar com a bagunça).
Depois da interrupção felina, vamos conferir se alguma coisa mudou. O git status é o comando certo para isso: ele mostra o estado atual do diretório de trabalho e do repositório.
Execute o comando git status para verificar o status do repositório.
Pela saída do comando git status, dá para ver que o arquivo hello.html foi modificado:
On branch main
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: hello.html
no changes added to commit (use "git add" and/or "git commit -a")
Vamos descobrir o que exatamente mudou. Você poderia abrir o arquivo e procurar a contribuição do gato, mas isso não é muito eficiente. E se o arquivo for grande, ou se o gato tiver sido especialmente produtivo?
O comando vem ao resgate, mostrando quais linhas do diretório de trabalho diferem da versão no repositório. Por padrão, ele compara com o que está na staging area (que não recebeu nenhuma alteração nova desde o último commit, então na prática estamos comparando com o último commit).
git diffVerifique a diferença entre o diretório de trabalho e o repositório.
Dica: quando a saída do git diff não cabe em uma tela, o Git pode abri-la em um pager, uma visualização com rolagem para saídas longas. Use as setas e para navegar por ela. Para sair do pager, pressione q.
A parte importante deve ficar assim. O Git vai mostrar hashes reais das versões comparadas do arquivo na linha index; este exemplo usa <old> e <new> no lugar:
diff --git a/hello.html b/hello.htmlindex <old>..<new> 100644--- a/hello.html+++ b/hello.html@@ -1 +1 @@-Hello, World!\ No newline at end of file+Hello, Meow! World! Meow! Meow! Meow!\ No newline at end of fileEsse formato de saída costuma ser chamado de patch, e a ideia dele é mostrar o que mudou no arquivo. Ironicamente, a saída foi projetada para ser legível por humanos, mas essa foi uma decisão de design tomada nos anos 1970, então ela pode não ser tão intuitiva quanto as interfaces modernas. De qualquer forma, mesmo que pareça meio enigmática no começo, existe um padrão. Veja como ler:
- A primeira linha indica que o diff está comparando duas versões do arquivo
hello.html. - A segunda linha mostra metadados internos do Git. Isso não é importante para entender as alterações no arquivo.
- As linhas
---e+++e os caminhos de arquivo mostram a quais arquivos as linhas-e+correspondem. - A linha
@@mostra os números das linhas alteradas nas versões antiga e nova do arquivo. - As linhas com o prefixo
-foram removidas na nova versão. - As linhas com o prefixo
+foram adicionadas na nova versão. - As linhas sem alteração aparecem para dar contexto, mas não têm prefixo.
Essa saída diz que:
- O arquivo
hello.htmlmudou, como mostram as primeiras linhas. - A linha
Hello, World!foi removida. - Ela foi substituída por
Hello, Meow! World! Meow! Meow! Meow!
Isso é um sinal claro da "contribuição" do nosso gato. Com o git diff, você pode revisar as alterações linha por linha, o que facilita achar modificações acidentais. Com uma visão clara do que mudou, você pode decidir se mantém as alterações, descarta ou modifica ainda mais.
O comando git diff aceita vários argumentos para comparar coisas diferentes. Por exemplo, git diff HEAD compara o diretório de trabalho com o último commit da branch atual, enquanto git diff 4620193 example.html compararia o arquivo example.html do diretório de trabalho com a versão do commit 4620193.
No próximo passo, vamos nos livrar do gatês e restaurar o Hello, World! original com outro comando útil do Git.
Faça o curso do jeito que ele foi pensado: progressão em pequenas doses, ordem linear e focada, desbloqueio gradual das entradas da Gitopedia. Continue com o Git de verdade no VS Code/Cursor/Antigravity/Windsurf a qualquer momento.
mas precisa de login