git diff
git diff: mostrar as diferenças entre commits, branches, arquivos ou o diretório de trabalho.
O comando git diff é usado para exibir as diferenças entre estados diferentes do seu repositório Git, como as diferenças entre o diretório de trabalho e a staging area, ou entre dois commits. Ele ajuda a ver quais alterações foram feitas, o que pode ser útil para revisar seu trabalho antes de commitar ou para entender a história do projeto.
Por padrão, o git diff mostra as diferenças entre o diretório de trabalho e a staging area. Assim você pode ver quais alterações fez que ainda não foram adicionadas ao stage para o commit. Você também pode usar o git diff para comparar arquivos, branches ou commits específicos.
O git diff é especialmente útil quando você quer:
- Revisar as alterações que você fez antes de adicioná-las ao stage ou de commitá-las.
- Comparar versões diferentes do projeto para ver como ele evoluiu ao longo do tempo.
- Identificar as linhas exatas de código que foram alteradas em um commit específico.
- Entender as diferenças entre branches antes de mergeá-las.
Quando a saída do git diff não cabe em uma tela, o terminal entra no modo pager (paginador), feito para navegar por listas longas. Nesse modo, você pode rolar a saída com as setas e do teclado (ou PageUp e PageDown para rolar mais rápido). Para sair do modo pager, pressione q.
Exemplos
Mostre todas as alterações fora do stage no diretório de trabalho:
git diffMostre todas as alterações no stage (ou seja, alterações prontas para serem commitadas):
git diff --stagedMostre as alterações entre dois commits:
git diff 1234abc 5678defMostre as alterações entre duas branches:
git diff main feature-branchMostre as alterações de um arquivo específico entre duas branches. Repare que a opção especial -- é usada para dizer ao Git que todos os argumentos seguintes são caminhos de arquivo. Isso é necessário para evitar ambiguidade quando um caminho de arquivo pode ser confundido com uma branch ou um commit:
git diff main feature-branch -- path/to/file.jsEntendendo a saída
Vamos supor que modificamos um arquivo chamado index.html, adicionando algumas tags novas e alterando uma existente. A saída do comando git diff pode ficar assim:
diff --git a/index.html b/index.htmlindex 1c2s3z5..4f5g6h7 100644--- a/index.html+++ b/index.html@@ -8,1 +8,3 @@-<h1>Old header</h1>+<h2>New header</h2>++<p>New text.</p>Esse formato de saída se chama patch e foi pensado para nos mostrar o que mudou no arquivo. Ironicamente, embora a saída seja feita para leitura humana, essa escolha de design foi feita nos anos 1970, então ela pode não ser tão intuitiva quanto as interfaces modernas. Mesmo que pareça meio críptica no começo, existe um padrão. Veja como ler:
- A primeira linha indica que o diff está comparando duas versões do arquivo
index.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 que correspondem as linhas-e+, respectivamente. - A linha
@@mostra os números das linhas das alterações nas versões antiga e nova do arquivo. - As linhas com o prefixo
-foram removidas na versão nova. - As linhas com o prefixo
+foram adicionadas na versão nova. - As linhas sem alteração aparecem para dar contexto, mas não têm prefixo.
Essa saída nos diz que:
- O arquivo
index.htmlmudou, como indicam os caminhos nas primeiras linhas. - A linha
<h1>Old header</h1>foi removida. - Ela foi substituída pela nova linha
<h2>New header</h2>. - Um novo bloco
<p>New text.</p>foi adicionado ao final, como mostra a linha que começa com+.
Um arquivo de patch como esse pode incluir várias alterações no arquivo, cada uma separada por uma linha @@. Ele também pode incluir vários arquivos.
.gitignoregit checkoutgit configgit taggit worktree