Rechercher dans l’historique de Git


Si vous voulez trouver tous les commits dont les messages contiennent une chaîne de caractères:

git log --grep="le truc a chercher"

Comme grep, on peut y adjoindre -i pour le rendre insensible à la casse, et -E pour utiliser des regex PCRE.

Si vous voulez trouver tous les commits dans lequel une chaîne a été retirée ou introduite dans un des fichiers:

git log -S"le truc a chercher"

Et dans ce cas vous voudrez probablement passer aussi -p --color=auto qui va vous permettre d’avoir un diff coloré et mis en contexte pour savoir ce qui a été modifié.

On peut limiter sa recherche dans le temps en utilisant --before et --after. Par exemple, pour chercher dans tous les commits créés après le 1er juillet et jusqu’à il y a 2 semaines:

git log --before="2 weeks ago" --after="2012-07-01"

Ou alors choisir deux commits et chercher entre ces deux commits:

git log 710f0f..8a5cbc

Ce qui va limiter la recherche à la branche en cours. En parlant de branche, on peut voir les commits qui sont sur une branche et pas l’autre:

git log master..develop

Ici on aura tout ce qui est sur develop qui n’est pas encore mergé dans master. L’inverse est bien sur possible.

Parfois on a besoin de savoir qui est le connard qui a fait ça, et on peut lister les commits d’un utilisateur:

git log --author sam

Ou

git log --author lesametlemax@notremail.com

En fait ça marche même avec une partie du nom.

Les critères ci-dessus peuvent être utilisés en même temps, et les résultats obtenus seront ceux correspondant à au moins un des critères (OU). Mais si vous voulez les commits qui correspondent à tous ces critères (ET), utilisez --all-match.

Tout ça cherche dans l’historique entier, mais si vous êtes plutôt intéressé par certains fichiers en particulier, vous pouvez préciser des paths après --.

git log --author max --before="1 day ago" -- project/settings.py project/settings_local.py

Et oui, ça marche récursivement sur les dossiers.

La plupart du temps les commits juste après les merges ne vous intéresse pas. On peut les ignorer avec –-no-merges.

Enfin si vous avez merdé et que vous pensez avoir perdu quelque chose dans Git, vous pouvez chercher dans le reflog avec --walk-reflogs. Cela vous donnera accès à tous les commits qui ne sont pas sur des branches ou plus accessibles facilement pour une raison ou une autre.

2 thoughts on “Rechercher dans l’historique de Git

  • Kontre

    Après l’année 20012, pas sûr qu’il y ait beaucoup de résultats…

  • Sam Post author

    J’ai toujours été super en avance sur mon temps comme mec.

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.