8
votes

Comment faire `Git Log --Stat - ` show * Tous * fichiers dans certains commits?

Lorsque j'utilise un argument avec Git journal --Stat pour limiter le journal à commet la modification de , liste git listes comme seul fichier modifié quand Affichage des engagements sélectionnés. Je voudrais plutôt voir tous modifié Chemins répertoriés pour chaque commit sélectionné.

Par exemple: xxx

Notez que le second Git journal , avec l'argument de chemin A .txt , dit "1 fichiers a changé", quand "2 fichiers a changé". Je voudrais git pour me dire que A.txt et b.txt a changé, même si je Sélectionné le commit basé sur le chemin A.txt .

Mise à jour: @Jacknagel répondit ma question, mais il s'avère que sa solution ne fonctionne pas dans mon cas de réel. Dans mon cas d'usage réel, je cherche tous les engagements qui modifient un fichier, y compris Renames, dans un cas où deux projets connexes ont divergé. Je dois savoir quels changements dans un projet impliquent des modifications correspondantes (je dois faire) dans l'autre projet. Malheureusement, git se plaint lorsque j'essaie d'utiliser - Full-diff et - suivez en même temps.

Donc, dans ma situation réelle, j'essaie de courir: xxx

et une solution qui fonctionne dans ce cas est la suivante: xxx

git

3 commentaires

Qu'est-ce que vous demandez n'a pas beaucoup de sens pour moi. Comment vous attendez-vous à une commande de se comporter d'une manière différente de celle qu'il est destiné à faire? Lorsque vous donnez le nom de fichier, vous dites à GIT d'obtenir les détails de ce fichier seul. Si vous voulez qu'il affiche les deux choses, utilisez la commande


@positron: J'utilise le nom du fichier pour identifier les engagements des intérêts, mais pour ceux qui s'engagent, je veux toutes les informations complètes. En substance, j'utilise le nom de fichier donné pour identifier les autres noms de fichiers inconnus d'intérêt. Donc, je ne peux pas dire git les autres fichiers, car je ne sais pas ce qu'ils sont.


Au lieu d'éditer votre question pour ajouter une réponse, la solution Stackoverflow est d'ajouter une réponse, même si c'est votre propre question. J'ai pris la liberté d'ajouter la bonne réponse, mais je vais le supprimer volontiers si vous le posez vous-même.


3 Réponses :


-1
votes

Comment vous attendez-vous à une commande de se comporter d'une manière différente de celle qu'elle est destinée à faire? Lorsque vous donnez le nom de fichier, vous dites à GIT d'obtenir les détails de ce fichier seul. Si vous voulez qu'il affiche les deux fichiers, utilisez la commande

git log -n1 --stat a.txt b.txt


1 commentaires

Je pense que l'idée est de dire à Git "Montrez-moi que ne commet que cette touche , mais lorsqu'on affiche ces engagements, énumérez tout ce qu'ils ont fait».



12
votes

Vous pouvez obtenir ce comportement à l'aide de l'option - FULL-DIFF CODE>:

   --full-diff
       Without this flag, "git log -p <path>..." shows commits that touch
       the specified paths, and diffs about the same specified paths. With
       this, the full diff is shown for commits that touch the specified
       paths; this means that "<path>..." limits only commits, and doesn't
       limit diff for those commits.

       Note that this affects all diff-based output types, e.g. those
       produced by --stat etc.


1 commentaires

Merci! Cela répond à la question que j'ai posée et j'accepte donc la réponse. Cependant, il s'avère que ma question n'était pas suffisamment spécifique, et - Full-Diff ne fonctionne pas dans ma situation réelle, où j'utilise - suivez . Je mettrai à jour la question et ajoutez une solution qui fonctionne avec - suivez dans une autre réponse.



0
votes

Trouvez d'abord les identifiants de validation, puis les conduisez à XARGS CODE> (ou GNU parallèle code>) pour alimenter chaque ID sur Git Afficher code>.

git log --format='%H' --follow -- a.txt | ForEach-Object { git show --stat -C $_ }


0 commentaires