git grep cherche du texte dans votre code actuel, git log -S
trouve le commit qui a introduit ou supprimé une chaîne, et
git log -L retrace l’historique d’une fonction. Ces trois outils
couvrent tous les besoins de recherche dans un dépôt Git, bien plus
efficacement que grep classique.
Prérequis : Consulter l’historique et Sélection de révisions.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Utiliser
git greppour chercher du texte dans tous les fichiers suivis - Rechercher avec
log -Sles commits qui ont introduit ou supprimé une chaîne - Localiser des changements dans une fonction avec
log -L - Combiner ces outils pour un workflow de débogage par l’historique
git grep : chercher dans le code
Section intitulée « git grep : chercher dans le code »git grep est plus rapide que grep -r car il ne parcourt que les
fichiers suivis par Git (il ignore node_modules/, .git/, les
artefacts de build…).
Recherche simple
Section intitulée « Recherche simple »# Chercher une chaîne dans tout le repogit grep "TODO"
# Résultat :# src/app.py:42: # TODO: gérer les erreurs# src/utils.py:18: # TODO: optimiser cette boucleOptions utiles
Section intitulée « Options utiles »| Option | Effet | Exemple |
|---|---|---|
-n | Affiche les numéros de ligne | git grep -n "TODO" |
-c | Compte les occurrences par fichier | git grep -c "TODO" |
-l | Liste uniquement les fichiers | git grep -l "TODO" |
-i | Insensible à la casse | git grep -i "error" |
-w | Mot entier uniquement | git grep -w "log" |
-p | Affiche la fonction englobante | git grep -p "calculate" |
--heading | Regroupe par fichier | git grep --heading -n "TODO" |
-e | Spécifie un motif (pour les regex) | git grep -e "err[ou]r" |
Recherche combinée avec --and/--or
Section intitulée « Recherche combinée avec --and/--or »Trouver les lignes qui contiennent deux motifs dans la même fonction :
# Lignes contenant "calculate" ET "price" dans le même fichiergit grep -l -e "calculate" --and -e "price"
# Lignes contenant "error" OU "warning"git grep -e "error" --or -e "warning"Chercher dans un commit ou une branche spécifique
Section intitulée « Chercher dans un commit ou une branche spécifique »# Chercher dans le commit v1.0git grep "TODO" v1.0
# Chercher dans une autre branchegit grep "calculate_price" feature/pricing
# Chercher dans HEAD~5git grep "deprecated" HEAD~5git log -S : le pickaxe
Section intitulée « git log -S : le pickaxe »Le « pickaxe » trouve les commits qui ont ajouté ou supprimé une
chaîne spécifique. Contrairement à grep qui cherche dans l’état
actuel, -S explore tout l’historique :
# Qui a introduit la fonction calculate_price ?git log -S "calculate_price" --oneline# a1b2c3d Ajout du module de tarification# e4f5a6b Suppression de l'ancien calcul
# Avec le diff completgit log -S "calculate_price" -pOptions du pickaxe
Section intitulée « Options du pickaxe »# Avec regex (-G au lieu de -S)git log -G "calc.*price" --oneline
# Limité à certains fichiersgit log -S "API_KEY" -- src/config/
# Avec les noms de fichiers affectésgit log -S "deprecated_function" --statgit log -L : historique d’une fonction
Section intitulée « git log -L : historique d’une fonction »-L retrace l’historique d’un bloc de lignes ou d’une
fonction à travers tous les commits :
Par plage de lignes
Section intitulée « Par plage de lignes »# Historique des lignes 10 à 25 de app.pygit log -L 10,25:src/app.pyPar nom de fonction
Section intitulée « Par nom de fonction »# Historique de la fonction calculate_price dans app.pygit log -L :calculate_price:src/app.pyGit détecte automatiquement les bornes de la fonction (grâce aux
patterns de langage dans userdiff). Chaque commit est affiché avec
le diff correspondant.
Exemple de sortie
Section intitulée « Exemple de sortie »commit a1b2c3dAuthor: Alice <alice@example.com>Date: Mon Mar 15 14:30:00 2026
fix: corriger la remise pour les gros volumes
diff --git a/src/app.py b/src/app.py--- a/src/app.py+++ b/src/app.py@@ -10,5 +10,7 @@ def calculate_price(quantity, unit_price): total = quantity * unit_price+ if quantity > 100:+ total *= 0.9 return totalComparatif des outils de recherche
Section intitulée « Comparatif des outils de recherche »| Besoin | Commande | Exemple |
|---|---|---|
| Texte dans le code actuel | git grep | git grep "TODO" |
| Texte dans une version passée | git grep ... ref | git grep "TODO" v1.0 |
| Commit ayant introduit une chaîne | git log -S | git log -S "calc" |
| Commit ayant touché une regex | git log -G | git log -G "calc.*" |
| Historique d’une fonction | git log -L | git log -L :func:file |
| Commit contenant un mot dans le message | git log --grep | git log --grep="fix" |
| Auteur d’une ligne | git blame | git blame file.py |
Combiner les outils
Section intitulée « Combiner les outils »Workflow de débogage typique :
# 1. Trouver où la fonction est utiliséegit grep -n "calculate_price"
# 2. Quand a-t-elle été modifiée ?git log -S "calculate_price" --oneline
# 3. Voir l'évolution complète de la fonctiongit log -L :calculate_price:src/app.py
# 4. Qui a écrit cette ligne spécifique ?git blame -L 42,50 src/app.pyDépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
git grep ne trouve rien | Fichier non suivi ou ignoré | Vérifiez avec git ls-files |
-L :func: ne détecte pas la fonction | Langage non reconnu | Ajoutez un pattern dans .gitattributes |
-S retourne trop de résultats | Chaîne trop courte/générique | Précisez avec -- chemin/ |
| Recherche lente sur gros repo | Historique volumineux | Limitez avec --since ou -- chemin/ |
À retenir
Section intitulée « À retenir »git grep: rapide, cherche dans le code actuel (ou une révision donnée)git log -S(pickaxe) : trouve le commit qui a introduit/supprimé une chaînegit log -G: comme-Smais avec des regex et sur le diffgit log -L: retrace l’historique complet d’une fonction- Combinez ces outils pour un débogage efficace :
grep→-S→-L→blame