Veja a diferença entre o estado atual e o último commit

94

Às vezes, quando estou prestes a fazer um commit, não consigo me lembrar exatamente o que mudou desde o último commit. Como posso ver uma diferença do estado atual do código e o último commit?

travis1097
fonte

Respostas:

117

Se você ainda não adicionou nenhum arquivo ao índice (com git add), basta fazer

git diff

Isso mostrará a diferença entre sua árvore de trabalho e o índice.

Se você adicionou arquivos ao índice, você precisa fazer isso para mostrar as diferenças entre o índice e o último commit (HEAD).

git diff --cached

Finalmente, se você quiser ver as mudanças feitas na árvore de trabalho em comparação com o último commit ( HEAD) você pode (como Carlos aponta) fazer

git diff HEAD

Essas mudanças são a combinação de git diffe git diff --cached.

Klas Mellbourn
fonte
2
git diffcompara a árvore de trabalho com o índice, não HEAD.
Carlos Martín Nieto
@CarlosMartínNieto Tem razão, senhor. Eu melhorei minha postagem para refletir isso.
Klas Mellbourn
Eu corro isso, mas o terminal, não termina, como posso sair? nada funciona.
Francisco Corrales Morales
@KlasMellbourn, é possível ver git diffo estado do índice e o commit anterior em uma mensagem diff?
alpha_989
2
Bem percebi como é git diff --cached HEAD^:)
alpha_989
33

Se você acabou de fazer um commit, ou quer ver o que mudou no último commit em comparação com o estado atual (assumindo que você tem uma árvore de trabalho limpa), você pode usar:

git diff HEAD^

Isso irá comparar o HEAD com o commit imediatamente anterior. Também se pode fazer

git diff HEAD^^

para comparar com o estado de jogo 2 commits atrás. Para ver a diferença entre o estado atual e um determinado commit, basta fazer:

git diff b6af6qc

Onde b6af6qcestá um exemplo de hash de confirmação.

Tallamjr
fonte
3
Um aviso para a versão cmd do Windows do git - você deve escapar do caractere circunflexo (^) com o próprio circunflexo. Portanto, "git diff HEAD ^" deve ser "git diff HEAD ^^". Da mesma forma, "HEAD ^^" deve ser inserido como "HEAD ^^^^".
Eellor
1
Nesta resposta, acho que não está claro a que "último commit" se refere. HEAD^é o commit antes do último commit.
Klas Mellbourn
3

Você pede ao git para diferenciar o último / atual commit, que tem a abreviação de HEAD.

Portanto git diff HEAD, comparará o estado atual da árvore de trabalho com o commit atual.

Carlos Martín Nieto
fonte
3

isso também mostra a diferença e quais arquivos foram alterados / modificados.

$ git status 

Exibe caminhos que têm diferenças entre o arquivo de índice e o commit HEAD atual, caminhos que têm diferenças entre a árvore de trabalho e o arquivo de índice e caminhos na árvore de trabalho que não são rastreados por git (e não são ignorados por gitignore (5) ) O primeiro é o que você iria cometer executando git commit; o segundo e o terceiro são o que você pode confirmar executando git add antes de executar git commit.

https://www.kernel.org/pub/software/scm/git/docs/git-status.html

dekdev
fonte
2

Isso também funciona para mim:

# The last one
git diff HEAD~1 HEAD

# The last but one, etc...
git diff HEAD~2 HEAD~1

Isso geralmente funciona para uma história linear. Isso pode ficar mais complicado se também houver commits de mesclagem. Recomendo que você dê uma olhada neste documento para uma explicação agradável e completa, especialmente aquele exemplo de ilustração de árvore de commit:

https://git-scm.com/docs/gitrevisions

Martin Flaska
fonte
0

Você já tentou git show?

DESCRIÇÃO : Mostra um ou mais objetos (blobs, trees, tags e commits).

Para commits, ele mostra a mensagem de log e a diferença textual. Ele também apresenta o commit de mesclagem em um formato especial produzido por git diff-tree --cc.

retirado do git help

Você não precisa escrever HEAD ou SHA-1 do último commit, apenas digite git show.

Acho que seria útil tanto para as suas necessidades quanto para as demais respostas, mas com um pouco menos de digitação e mais informações dependendo do caso.

Aqui, adiciono uma amostra do que git showrealmente mostra:

>> git show

commit 49832d33b5329fff95ba0a86002ee8d5a762f3ae (HEAD -> my_new_branch, master)
Author: Abimael Domínguez <[email protected]>
Date:   Thu Jan 7 13:05:38 2021 -0600

    This is the commit message of the last commit

diff --git a/some_folder/some_file.txt b/some_folder/some_file.txt
index 59fb665..5c36cde 100644
--- a/some_folder/some_file.txt
+++ b/some_folder/some_file.txt
@@ -3,6 +3,6 @@
 This is the content of the last updated file
 some text
 some text
-text deleted
+text added
 some text
 some text

Abimael Domínguez
fonte