web-dev-qa-db-fra.com

Comment voir tous les commits pour une journée spécifique?

J'ai déjà consulté les documents pertinents de git-scm.com et gitref.org , mais je n'arrive pas à comprendre.

Supposons que je souhaite que tous les engagements soient validés pour le mardi 12 novembre 2013. En prenant pour exemple un référentiel existant, je sais que j'ai commis des engagements ce jour-là, ainsi que des engagements de la veille et du lendemain.

Avec 2013-11-11 et 2013-11-12

Tout ce qui suit m’engage pour les 11 et 12 novembre:

  • git log --after="2013-11-11" --until="2013-11-12"
  • git log --since="2013-11-11" --until="2013-11-12"
  • git log --after="2013-11-11" --before="2013-11-12"
  • git log --since="2013-11-11" --before="2013-11-12"

Avec 2013-11-12 seulement

Tout ce qui suit ne me donne aucun engagement:

  • git log --since="2013-11-12" --until="2013-11-12"
  • git log --since="2013-11-12" --before="2013-11-12"
  • git log --after="2013-11-12" --until="2013-11-12"
  • git log --after="2013-11-12" --before="2013-11-12"

Avec 2013-11-12 et 2013-11-13

Comme prévu (d'après les résultats de 2013-11-11 et 2013-11-12 ci-dessus), tous les éléments suivants me donnent les résultats des 12 et 13 novembre:

  • git log --since="2013-11-12" --before="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"
  • git log --since="2013-11-12" --until="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"

...et ainsi de suite. J'ai l'impression que j'ai essayé toutes les combinaisons possibles de since, after, before et until, mais je ne parviens toujours pas à trouver la réponse. Je comprends si ces options sont inclusives ou exclusives, puisqu'elles semblent être inclusives si les deux dates sont différentes, mais exclusives si elles se déroulent le même jour. Ai-je raté quelque chose/qu'est-ce que je fais de travers?!

153
3cheesewheel

Merci John Bartholomew!

La réponse est de spécifier l'heure, par exemple. git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"

185
3cheesewheel

J'ai l'habitude de consulter mon journal git et de voir ce que je travaillais un jour spécifique et de mettre à jour ma feuille de temps en fonction de cela, mais il est très pénible de taper la date complète au format ISO, je le fais simplement comme ceci

git log --after=jun9 --before=jun10

et j'ajoute --author pour n'imprimer que mes commits

git log --since=jun9 --until=jun10 --author=Robert 

Ceci affiche les commits qui se sont produits le 9 juin dernier (donc pour 2016 dans ce cas et non pour 2015 ou 2014 et ainsi de suite).

Les paramètres --since/--after Et --until/--before Peuvent également contenir des éléments tels que 3 days ago, yesterday, etc.

23
Kohányi Róbert

Rien de mal avec la réponse acceptée (que j'ai voté), mais ... nous sommes là pour la science!

Le résultat ci-dessous peut être développé/personnalisé avec pretty=format:<string>espaces réservés :

git log --pretty='format:%H %an %ae %ai' | grep 2013-11-12

Non protégé à 100% contre les erreurs car la même chaîne aurait pu être entrée par un utilisateur. Mais acceptable en fonction des marques de réservation utilisées. L'extrait ci-dessus n'échouerait pas, par exemple.

On pourrait aussi bien analyser le tout git log to JSON et consomme/manipule ses données au contenu de son coeur. Vérifiez https://github.com/dreamyguy/gitlogg et ne regardez jamais en arrière!

Disclaimer: c'est l'un de mes projets.

11
Wallace Sidhrée

J'ai créé un pseudonyme à cette fin:

commitsAtDate = "!f() { git log --pretty='format:%C(yellow)%h %G? %ad%Cred%d %Creset%s%C(cyan) [%cn]' --decorate --after=\"$1 0:00\" --before=\"$1 23:59\" --author \"`git config user.name`\"; }; f"

Usage:

git commitsAtDate 2017-08-18
8
Michael Große