2015-08-05 1 views
5

git log --follow <myfile> montre le git log pour un fichier.Pourquoi ne puis-je pas utiliser git log --follow avec --full-diff?

Je voudrais voir ce journal avec tous les changements (diffs) dans ce fichier. J'essaie:

git log --full-diff --follow <myfile> 

Mais cette tentative échoue avec:

fatal: --follow requires exactly one pathspec 

Pourquoi? Comment puis-je obtenir le diff que je voulais?

Ou peut-être, est-ce un bug dans git?

Répondre

3

Vous pouvez l'obtenir comme ceci:

git diff <file_path_relative_to_project_root> 

Modifié:

Explication: A pris un certain temps pour comprendre. Chaque fois que git log -p <file> est utilisé, il montre les commits où jamais le fichier a été touché et diffs pour le même fichier seul. Cela signifie que si vous voulez suivre l'histoire complète d'un fichier, vous pouvez ajouter - suivre l'option et obtenir l'historique complet.

Mais quand vous entrez cette commande: git log --full-diff -p file, il vous montre tous les commits où que ce fichier a été touché, plus maintenant, il montre non seulement diff pour le fichier spécifié, mais montre aussi les diff est pour tous les fichiers qui ont été touchés dans le commit. Cela signifie qu'il vous donne le résultat pour plusieurs fichiers.

Si vous essayez cette commande: git log help Vous verrez que --follow option ne peut être utilisée que pour un seul fichier si vous pouvez avoir une commande comme ceci: git log --follow -p file car il présente les résultats pour seulement un seul fichier. Il ne peut pas être utilisé avec la commande suivante: git log --full-diff --follow -p file car il affiche les résultats pour plusieurs fichiers et cette requête entraînerait une erreur.

+0

Non Git diff ne peut me montrer que les changements entre 2 états du fichier (par défaut: le fichier de repo HEAD et le fichier du disque), mais pas l'historique complet. – mik01aj

+1

Vous trouverez votre réponse [ici] (http://stackoverflow.com/a/5493663/3863146) c'est-à-dire ** git log --follow -p - fichier ** – sahil

+0

Merci, cela fonctionne! Donc vous avez répondu à ma deuxième question :) Que diriez-vous de l'explication du "pourquoi"? – mik01aj

3

TL; DR Version de la réponse de Sahil:

Dans git log, --full-diff ne fonctionne pas avec --follow, parce "full" means "show all changed files" et --follow fonctionne uniquement avec un seul fichier.

Solution: utiliser git log --follow -p <file>.