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.
Après l’année 20012, pas sûr qu’il y ait beaucoup de résultats…
J’ai toujours été super en avance sur mon temps comme mec.