Aller au contenu
Développement medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Rechercher dans Git : grep, log -S, log -L

8 min de lecture

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.

  • Utiliser git grep pour chercher du texte dans tous les fichiers suivis
  • Rechercher avec log -S les 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 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…).

Fenêtre de terminal
# Chercher une chaîne dans tout le repo
git grep "TODO"
# Résultat :
# src/app.py:42: # TODO: gérer les erreurs
# src/utils.py:18: # TODO: optimiser cette boucle
OptionEffetExemple
-nAffiche les numéros de lignegit grep -n "TODO"
-cCompte les occurrences par fichiergit grep -c "TODO"
-lListe uniquement les fichiersgit grep -l "TODO"
-iInsensible à la cassegit grep -i "error"
-wMot entier uniquementgit grep -w "log"
-pAffiche la fonction englobantegit grep -p "calculate"
--headingRegroupe par fichiergit grep --heading -n "TODO"
-eSpécifie un motif (pour les regex)git grep -e "err[ou]r"

Trouver les lignes qui contiennent deux motifs dans la même fonction :

Fenêtre de terminal
# Lignes contenant "calculate" ET "price" dans le même fichier
git 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 »
Fenêtre de terminal
# Chercher dans le commit v1.0
git grep "TODO" v1.0
# Chercher dans une autre branche
git grep "calculate_price" feature/pricing
# Chercher dans HEAD~5
git grep "deprecated" HEAD~5

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 :

Fenêtre de terminal
# 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 complet
git log -S "calculate_price" -p
Fenêtre de terminal
# Avec regex (-G au lieu de -S)
git log -G "calc.*price" --oneline
# Limité à certains fichiers
git log -S "API_KEY" -- src/config/
# Avec les noms de fichiers affectés
git log -S "deprecated_function" --stat

-L retrace l’historique d’un bloc de lignes ou d’une fonction à travers tous les commits :

Fenêtre de terminal
# Historique des lignes 10 à 25 de app.py
git log -L 10,25:src/app.py
Fenêtre de terminal
# Historique de la fonction calculate_price dans app.py
git log -L :calculate_price:src/app.py

Git détecte automatiquement les bornes de la fonction (grâce aux patterns de langage dans userdiff). Chaque commit est affiché avec le diff correspondant.

commit a1b2c3d
Author: 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 total
BesoinCommandeExemple
Texte dans le code actuelgit grepgit grep "TODO"
Texte dans une version passéegit grep ... refgit grep "TODO" v1.0
Commit ayant introduit une chaînegit log -Sgit log -S "calc"
Commit ayant touché une regexgit log -Ggit log -G "calc.*"
Historique d’une fonctiongit log -Lgit log -L :func:file
Commit contenant un mot dans le messagegit log --grepgit log --grep="fix"
Auteur d’une lignegit blamegit blame file.py

Workflow de débogage typique :

Fenêtre de terminal
# 1. Trouver où la fonction est utilisée
git 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 fonction
git log -L :calculate_price:src/app.py
# 4. Qui a écrit cette ligne spécifique ?
git blame -L 42,50 src/app.py
SymptômeCause probableSolution
git grep ne trouve rienFichier non suivi ou ignoréVérifiez avec git ls-files
-L :func: ne détecte pas la fonctionLangage non reconnuAjoutez un pattern dans .gitattributes
-S retourne trop de résultatsChaîne trop courte/génériquePrécisez avec -- chemin/
Recherche lente sur gros repoHistorique volumineuxLimitez avec --since ou -- chemin/
  • 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îne
  • git log -G : comme -S mais avec des regex et sur le diff
  • git log -L : retrace l’historique complet d’une fonction
  • Combinez ces outils pour un débogage efficace : grep-S-Lblame

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn