724 votes

Comment grep Git commit des diff ou de contenu, pour un certain mot?

Dans un code Git repository je veux la liste de tous les commits contenant un certain mot. J'ai essayé ce

git log -p | grep --context=4 "word"

mais il ne doit pas nécessairement donner moi le nom de fichier (sauf si c'est moins que 5 des lignes à partir de la parole que je recherché. J'ai aussi essayé

git grep "word"

mais donne-moi seulement de présenter les fichiers et non de l'histoire.

Comment effectuer une recherche dans l'ensemble de l'histoire afin que je puisse suivre les changements sur un mot en particulier? Je veux dire à la recherche de mon code pour les occurrences de mot pour le suivi des modifications (recherche dans les dossiers de l'histoire).

1060voto

Jakub Narębski Points 87537

Si vous voulez trouver tous les commits où le message de validation contient de la parole donnée, l'utilisation

$ git log --grep=word

Si vous voulez trouver tous les commits où "la parole" a été ajoutée ou supprimée dans le contenu du fichier (pour être plus exact: où nombre d'occurences de "word" a été changé), c'est à dire la recherche de la commettre contenu, de l'utilisation de soi-disant "pioche" recherche avec

$ git log -Sword

Moderne git il y a aussi

$ git log -Gword

pour chercher des différences dont ajoutés ou supprimés de la ligne correspond à un "mot" (également commettre des matières).

Notez que -G par défaut accepte une regex, tout en -S accepte une chaîne de caractères, mais peut être modifié pour accepter les regexes à l'aide de l' --pickaxe-regex.

Pour illustrer la différence entre -S<regex> --pickaxe-regex et -G<regex>, envisager un commit avec la suite de diff dans le même fichier:

+    return !regexec(regexp, two->ptr, 1, &regmatch, 0);
...
-    hit = !regexec(regexp, mf2.ptr, 1, &regmatch, 0);

Alors qu' git log -G"regexec\(regexp" montrera ce commit, git log -S"regexec\(regexp" --pickaxe-regex ne le feront pas (parce que le nombre d'occurrences de la chaîne n'a pas changé).

266voto

u0b34a0f6ae Points 14874

la commande git log de pioche trouverez engage avec modifications, y compris le "mot" avec git log -Sword

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