Aller au contenu
Développement medium

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 tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn