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 il me donne seulement présenter des fichiers et non pas 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).
- Double Possible de Comment grep (recherche) commis de code dans l'historique de git?
Vous devez vous connecter pour publier un commentaire.
Si vous voulez trouver tous les commits où message de commit contient de la parole donnée, l'utilisation
Si vous voulez trouver tous les commits où "la parole" a été ajoutée ou supprimée dans la 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, l'utilisation de soi-disant "pioche" recherche avec
Moderne git il y a aussi
chercher différences dont ajoutés ou supprimés de la ligne correspond à un "mot" (également commettre contenu).
Noter que
-G
par défaut accepte une regex, tandis que-S
accepte une chaîne de caractères, mais peut être modifié pour accepter les regexes à l'aide de la--pickaxe-regex
.git log -S word
travaille également pour le second casman git log
est donc pas clair. J'ai eu à la lecture et de l'expérience trois fois pour rattraper la différence.-G<string>
Chercher les différences dont ajoutés ou supprimés de la ligne correspond à la donnée <regex>.-S<string>
est plus rapide car il vérifie seulement si le nombre d'occurrences de<string>
changé, tandis que-G<string>
recherches ajoutés et supprimés de la ligne dans chaque livraison diff.git log --grep=word
vous avez mentionné pour le message de commit, plutôt que de commettre le contenu.git log --grep="my words"
.-S
et-G
. Vous pouvez citer la chaîne de chacun de ces arguments.-G
accepter chaîne fixe, de sorte que vous n'avez pas à citer des caractères spéciaux?-G
et-S
sans le--pickaxe-regex
drapeau (c'est tout que l'on prend une chaîne et que l'autre prend une regex? Comme il arrive, aucun, mais je n'aurais jamais deviné à la lecture de cette réponse.) et serait à l'avantage de faire la différence plus clair. Il avait également bénéficier de docs liens.find
ougrep
.regex
tous les fichiers dans un domaine spécifique de commettre HACHAGE (ne pas le commettre diff)?git log
's pioche trouverez engage avec modifications, y compris le "mot" avecgit log -Sword
Après beaucoup d'expérimentation, je peux vous recommander le suivant, qui montre s'engage à ce que d'introduire ou de supprimer les lignes contenant une expression rationnelle, et affiche le texte des modifications de chacun, avec des couleurs montrant les mots ajoutés et supprimés.
Faut du temps pour exécuter si... 😉
GIT_PAGER=cat
ou ajouter avec| cat
Une façon de plus de/la syntaxe est:
git log -S "word"
Comme cela, vous pouvez rechercher par exemple
git log -S "with whitespaces and stuff @/#ü !"
Vous pouvez essayer la commande suivante:
ou à l'aide de
grep
de la manière suivante:Exécuter cette commande dans le répertoire où vous souhaitez rechercher.
git log --patch --color=always | less +/searching_string
.vim-fugitif est polyvalent pour ce type d'examen dans Vim.
Utilisation
:Ggrep
de le faire. Pour plus d'informations, vous pouvez installer vim-fugitif et rechercher le turorial par:help Grep
. Et cet épisode: explorer-le-histoire-de-a-git-référentiel va vous guider pour faire tout ça.À utiliser l'opérateur booléen sur l'expression régulière:
Cette expression régulière recherche d'expression régulière [0-9]* ou [a-z]* lors de la validation des messages.
Si vous souhaitez rechercher des données sensibles afin de le supprimer à partir de votre historique de git (qui est la raison pour laquelle j'ai atterri ici), il y a des outils pour cela. Github comme un dédié page d'aide pour cette question.
Voici le résumé de l'article: