137 votes

git: Comment diff fichiers modifiés rapport aux versions précédentes après un pull?

Quand je lance "git pull" j'ai souvent envie de savoir ce qui a changé entre la dernière version d'un fichier et le nouveau. Dire je veux savoir ce que quelqu'un d'autre a commis à un fichier particulier.

Comment est-ce fait?

Je suis en supposant que c'est "git diff" avec certains paramètres pour commettre x contre y commettre, mais je n'arrive pas à obtenir la syntaxe. Je trouve aussi "git log" confondre un peu et je suis pas sûr de savoir où obtenir la validation de l'ID de ma dernière version du fichier par rapport à la nouvelle.

175voto

Jefromi Points 127932

Il y a toutes sortes de merveilleuses façons de spécifier s'engage - voir la spécification des révisions de la section de l' man git-rev-parse pour plus de détails. Dans ce cas, vous voudrez probablement:

git diff HEAD@{1}

L' @{1} signifie "la position précédente de la ref que j'ai spécifié", de sorte que évalue à ce que vous aviez vérifié précédemment, juste avant le pull. Vous pouvez fixer HEAD sur la fin, si vous avez aussi des changements dans votre travail de l'arbre et que vous ne voulez pas voir de diff pour eux.

Je ne suis pas sûr de ce que vous allez avoir avec "la validation de l'ID de ma dernière version du fichier" - le commettre "ID" (hash SHA1), c'est que de 40 caractères hex à droite au-dessus de chaque entrée dans la sortie de la commande git log. C'est la valeur de hachage pour l'ensemble de s'engager, non pas pour un fichier donné. Vous n'avez jamais vraiment besoin de plus d' - si vous souhaitez diff juste un fichier à travers la traction, ne

git diff HEAD@{1} filename

C'est une chose générale, - si vous voulez savoir à propos de l'état d'un fichier dans un commit, vous spécifiez la livraison et le fichier, pas un ID/hachage spécifiques au fichier.

67voto

cadizm Points 198

J'aime utiliser:

git diff HEAD^

Ou si je ne veux diff un fichier spécifique:

git diff HEAD^ -- /foo/bar/baz.txt

15voto

Charles Bailey Points 244082

Si vous faites une quinte git pull alors vous devrez soit être "avance rapide" ou de fusionner un nombre inconnu de commits sur le dépôt distant. Ce qui se passe comme une seule action, donc le dernier commit que vous étiez à immédiatement avant le tirage sera la dernière entrée dans le reflog et peut être consulté en tant que HEAD@{1}. Cela signifie que vous pouvez faire:

git diff HEAD@{1}

Toutefois, je recommande fortement que si c'est quelque chose que vous vous retrouver à faire beaucoup, alors vous devriez envisager de faire juste un git fetch et l'examen de la prochaine branche manuellement avant la fusion ou la relocalisation sur elle. E. g. si vous êtes sur le master et allaient tirer dans origin/master:

git fetch

git log HEAD..origin/master

 # looks good, lets merge

git merge origin/master

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