Voir la différence entre l'état actuel et le dernier commit

93

Parfois, lorsque je suis sur le point de faire un commit, je ne me souviens pas exactement de ce qui a changé depuis le dernier commit. Comment puis-je voir un diff de l'état actuel du code et du dernier commit?

travis1097
la source

Réponses:

113

Si vous n'avez pas encore ajouté de fichiers à l'index (avec git add), faites simplement

git diff

Cela montrera la différence entre votre arbre de travail et votre index.

Si vous avez ajouté des fichiers à l'index, vous devez le faire pour afficher les différences entre l'index et le dernier commit (HEAD).

git diff --cached

Enfin, si vous voulez voir les modifications apportées dans l'arborescence de travail par rapport au dernier commit ( HEAD), vous pouvez (comme le souligne Carlos)

git diff HEAD

Ces changements sont la combinaison de git diffet git diff --cached.

Klas Mellbourn
la source
2
git diffcompare l'arbre de travail à l'index, pas à HEAD.
Carlos Martín Nieto
@ CarlosMartínNieto Vous avez raison, monsieur. J'ai amélioré mon message pour refléter cela.
Klas Mellbourn
Je lance ça, mais le terminal ne s'arrête pas, comment puis-je sortir.? rien ne fonctionne.
Francisco Corrales Morales
@KlasMellbourn, Est-il possible d'afficher git diffl'état de l'index et le commit précédent dans un message diff?
alpha_989
2
Eh bien compris, c'est git diff --cached HEAD^:)
alpha_989
33

Si vous venez de faire un commit, ou si vous voulez voir ce qui a changé dans le dernier commit par rapport à l'état actuel (en supposant que vous ayez un arbre de travail propre), vous pouvez utiliser:

git diff HEAD^

Cela comparera le HEAD avec le commit juste avant. On pourrait aussi faire

git diff HEAD^^

pour comparer à l'état de jeu 2 commits auparavant. Pour voir la différence entre l'état actuel et un certain commit, faites simplement:

git diff b6af6qc

b6af6qcest un exemple de hachage de validation.

tallamjr
la source
3
Un heads-up pour la version Windows cmd de git - vous devez échapper le caractère caret (^) avec le caret lui-même. Par conséquent, "git diff HEAD ^" sera "git diff HEAD ^^". De la même manière, "HEAD ^^" doit être entré comme "HEAD ^^^^".
Eellor
1
Dans cette réponse, je pense qu'il est un peu difficile de savoir à quoi fait référence le "dernier commit". HEAD^est le commit avant le dernier commit.
Klas Mellbourn
3

Vous demandez à git de différencier le commit actuel / dernier, qui a un raccourci de HEAD.

Nous git diff HEADallons donc comparer l'état actuel de l'arbre de travail avec le commit actuel.

Carlos Martín Nieto
la source
3

cela montre également la différence et quels fichiers ont été changés / modifiés.

$ git status 

Affiche les chemins qui ont des différences entre le fichier d'index et le commit HEAD actuel, les chemins qui ont des différences entre l'arborescence de travail et le fichier d'index, et les chemins dans l'arbre de travail qui ne sont pas suivis par git (et ne sont pas ignorés par gitignore (5) ). Le premier est ce que vous commettriez en exécutant git commit; les deuxième et troisième sont ce que vous pouvez valider en exécutant git add avant d'exécuter git commit.

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

dekdev
la source
2

Cela fonctionne aussi pour moi:

# The last one
git diff HEAD~1 HEAD

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

Cela fonctionne généralement pour une histoire linéaire. Cela pourrait devenir plus délicat s'il existe également des validations de fusion. Je vous recommande de regarder dans ce document pour une explication agréable et complète, en particulier cet exemple d'illustration d'arbre de validation:

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

Martin Flaska
la source