1988 votes

Comment puis-je voir les changements dans un commit Git?

Lorsque je fais git diff COMMIT, je vois les changements entre ce commit et HEAD (autant que je sache), mais j'aimerais voir les changements qui ont été faits par ce commit unique.

Je n'ai trouvé aucune option évidente sur diff / log qui me donnera ce résultat.

6 votes

2474voto

Nevik Rehnel Points 5446

Pour voir la différence pour un hachage de COMMIT particulier, où COMMIT est le hachage du commit :

git diff COMMIT~ COMMIT vous montrera la différence entre l'ancêtre de ce COMMIT et le COMMIT. Consultez les pages de manuel de git diff pour plus de détails sur la commande et gitrevisions à propos de la notation ~ et ses amis.

Alternativement, git show COMMIT fera quelque chose de très similaire. (Les données du commit, y compris sa diff - mais pas pour les commits de fusion.) Consultez la page de manuel git show.

(aussi git diff COMMIT vous montrera la différence entre ce COMMIT et le dernier.)

19 votes

Notez que le ^ doit être mis entre guillemets dans les shells Thomson et Bourne (synonyme de | là-bas) et rc et ses dérivés (opérateur chapeau) et dans zsh avec extendedglob activé (opérateur de non globbing).

1 votes

Cela ne fonctionne plus. git diff HEAD^ HEAD ne montre rien.

1 votes

@user3690202, oui c'est le cas. Si la différence ne montre rien, cela signifie que la différence est vide (il n'y a pas de différence entre HEAD^ et HEAD). Cela peut notamment se produire lorsque vous ignorez les espaces blancs, ou si vous avez simplement des commits identiques.

600voto

VonC Points 414372

Comme mentionné dans "Raccourci pour la différence du commit git avec son parent?", vous pouvez également utiliser git diff avec:

git diff COMMIT^!

ou

git diff-tree -p COMMIT

Avec git show, vous auriez besoin (pour vous concentrer uniquement sur la différence) de faire:

git show --color --pretty=format:%b COMMIT

Le paramètre COMMIT est un commit-ish:

Un objet commit ou un objet qui peut être dereféré de manière récursive vers un objet commit. Les éléments suivants sont tous des commit-ish : un objet commit, un objet tag qui pointe vers un objet commit, un objet tag qui pointe vers un objet tag qui pointe vers un objet commit, etc.

Voir gitrevision "SPÉCIFICATION DES RÉVISIONS" pour référencer un commit-ish.
Voir également "Que signifie tree-ish dans Git?".

30voto

Cupcake Points 22154

À partir de la page de manuel pour git-diff(1):

git diff [options] [] [--] […]
git diff [options] --cached [] [--] […]
git diff [options]   [--] […]
git diff [options]  
git diff [options] [--no-index] [--]  

Utilisez le 3ème au milieu:

git diff [options]  

Aussi à partir de la même page de manuel, en bas, dans la section des Exemples:

$ git diff HEAD^ HEAD      <3>

Comparer la version avant le dernier commit avec le dernier commit.

Admettons que c'est formulé un peu confusément, cela serait moins confus en:

Comparer le commit le plus récent avec le commit précédent.

3 votes

Votre reformulation s'appliquerait à git diff HEAD HEAD^.

0 votes

Git diff HEAD^ HEAD ne montre aucun changement.

0 votes

@user3690202 donc cela implique qu'il n'y a pas de changements à afficher. Est-ce réellement le cas?

24voto

MichaelMoser Points 169

Le suivant semble faire l'affaire; je l'utilise pour montrer ce qui a été apporté par une fusion.

git whatchanged -m -n 1 -p

0 votes

Est-ce que ça fonctionnerait aussi avec git log? (à cause de stackoverflow.com/a/18585297/6309)

0 votes

Git log --name-only - pour répertorier les fichiers modifiés. Ou git log --name-status --find-renames -pour obtenir la liste des fichiers modifiés avec le type de modification (ajouté/modifié/renommé, etc)

10voto

chandpriyankara Points 909
git difftool COMMIT^ <identifiant du commit>

est également possible si vous avez configuré votre difftool.

Consultez ici comment configurer difftool. Ou la page manuelle ici.

De plus, vous pouvez utiliser git diff-tree --no-commit-id --name-only -r <identifiant du commit> pour voir quels fichiers ont été modifiés/commis à partir d'un identifiant de commit donné.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X