Comment afficher tous les commits pour un jour spécifique?

195

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

Disons que je veux obtenir tous les commits pour le mardi 12 novembre 2013. En utilisant un repo existant comme exemple, je sais pertinemment que j'ai des commits ce jour-là, ainsi que des commits la veille et le lendemain.

Avec 2013-11-11et2013-11-12

Tout ce qui suit me donne des engagements 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-12seulement

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-12et2013-11-13

Comme prévu (à partir des résultats de 2013-11-11et 2013-11-12ci - 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. Je me sens comme je l' ai essayé toutes les combinaisons possibles since, after, beforeet untilmais ne peut toujours pas trouver la réponse, et je ne comprends si ces options sont inclusifs ou exclusifs, car ils semblent être inclus si les deux dates sont différentes, mais exclusifs s'ils sont le même jour. Ai-je manqué quelque chose / qu'est-ce que je fais de mal?!

3 roue
la source
9
J'ai trouvé des git depuis / après / jusqu'à / avant de gérer moi-même très bizarre, donc je ne connais pas la réponse, mais avez-vous essayé de spécifier la date + l'heure (par exemple, --since = "2013-11-12 00:00 ")? De plus, est-ce que (certains de) vos commits ont des dates de committer et d'auteur différentes?
John Bartholomew
Tu l'as eu! Préciser le temps travaillé. Il ne m'est même pas venu à l'esprit de l'essayer avec le temps. Merci! En ce qui concerne les dates des auteurs et des auteurs, aucun correctif n'a été appliqué pendant ces dates, donc ce n'était pas ça.
3cheesewheel
Il me semble que 'git log --boundary' devrait le faire pour vous, de sorte que 'git log --boundary --after = "2013-11-12" --before = "2013-11-12"' affiche exactement un commit (celui que vous pensez qu'il ferait :)).
qneill du

Réponses:

246

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"

3 roue
la source
12
Agréable. Cependant, cette commande omettra les validations entre 23h59 et 00h00 le lendemain, c'est donc git log --after="2013-11-12 00:00" --before="2013-11-13 00:00"mieux. Je pense que gitk --since="2013-11-12 00:00" --until="2013-11-13 00:00" &cela fonctionnerait également si vous avez installé gitk.
HelloGoodbye
6
Dans git 2.13.0. git log --after="2017-07-25" --before="2017-07-26"donne des résultats valables pour moi.
powlo
2
S'agit-il de la branche actuellement extraite? Comment voir à travers toutes les branches?
nawfal
C'est la bonne réponse, mais je suis toujours déconcerté et j'ai posté cette question de suivi: stackoverflow.com/questions/59691065/…
bgoodr
31

Je vérifie généralement mon journal git et vois ce que je travaillais un jour spécifique et je mets à jour ma feuille de temps en fonction de cela, mais c'est une douleur dans le cul de taper la date complète au format ISO alors je le fais simplement comme ça

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

et j'ajoute --authorpour n'imprimer que mes commits

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

Cela imprime les commits qui ont eu lieu le 9 juin dernier (donc pour 2016 dans ce cas et non pour 2015 ou 2014 et ainsi de suite).

Les --since/--afteret les --until/--beforeparamètres peuvent également prendre des choses comme 3 days ago, yesterday, etc.

Kohányi Róbert
la source
Ne fonctionne tout simplement pas, ne produit rien. Est-ce que je manque quelque chose? Dois-je spécifier une succursale?
Aurimas
1
@Aurimas Eh bien, je ne sais pas ce qui ne va pas de votre côté. Si vos valeurs sinceet untilne sont pas correctes, vous n'obtiendrez aucune sortie, c'est certain. Utilisez d' git logabord et essayez de choisir une valeur sinceet en untilfonction de ce que vous voyez. Aucune succursale ou quoi que ce soit de spécial requis. Je ne sais pas depuis quelle version de Git cette fonctionnalité est disponible. Assurez-vous également d'avoir une version récente.
Kohányi Róbert
6
J'ai dû utiliser des espaces:git log --after="may 2" --before="may 3"
Connor Clark
16

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

La sortie ci-dessous peut être développée / personnalisée avec des pretty=format:<string> espaces réservés :

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

Pas à 100% immunisé contre les erreurs car la même chaîne aurait pu être saisie par un utilisateur. Mais acceptable selon les espaces réservés utilisés. L'extrait ci-dessus n'échouerait pas, par exemple.

On pourrait aussi bien analyser tout l'ensemble git logà JSONet à consommer / manipuler ses données à un contenu de coeur. Vérifiez https://github.com/dreamyguy/gitlogg et ne regardez jamais en arrière!

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

Wallace Sidhrée
la source
12

J'ai créé un alias git dans ce but précis:

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
Michael Große
la source
2
vous pouvez également spécifier des dates relatives à cet alias, c'est git commitsAtDate yesterday-à- dire 2 days ago, etc.
voiger
-2

Ce script affiche la plage de dates disponible des validations pour le dépôt actuel, puis vous demande la date à partir de laquelle vous souhaitez voir les validations. Il affiche un SHA court et le SHA complet, l'auteur, l'horodatage de la validation et les commentaires entre guillemets simples.

Le script continue de demander des dates jusqu'à ce que vous appuyiez sur Entrée ou Ctrl-D.

Utilisateurs Mac: nécessite la date GNU.

#!/bin/bash

COMMITS=`git log --abbrev-commit --pretty="format:%h %H %ai" | sort -k3 -k4`
FIRST=`echo "$COMMITS" | head -n 1`
LAST=`echo "$COMMITS" | tail -n 1`
echo "First commit: $FIRST"
echo "Last commit: $LAST"
printf "Date to search for commits: "
read DATE
while [[ "$DATE" ]]; do
  NEXT_DATE=`date +%Y-%m-%d -d "$DATE +1 day"`
  #echo "Searching for commits from $DATE to $NEXT_DATE"
  echo `git log --after="$DATE" --before="$NEXT_DATE" --pretty="format:%h %H %an %ci '%s'"`
  printf "\nDate to search for commits: "
  read DATE
done

J'ai appelé le script commitsOnDates, et le voici en action. La première date que j'entre n'a pas de validation, donc la réponse est juste une ligne vide:

$ commitsOnDates
First commit: 375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f 2015-08-03 13:37:16 -0700
Last commit: 1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 2018-10-13 21:32:27 -0700
Date to search for commits: 2015-08-13


Date to search for commits: 2015-08-03
375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f Mike Slinn 2015-08-03 13:37:16 -0700 'this is a comment'

Date to search for commits: 2018-10-13
1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 Mike Slinn 2018-10-13 21:32:27 -0700 'a comment' 64d6e16 64d6e16338657b82c91ac94bea8ebf7b80dc4c28 Mike Slinn 2018-10-13 18:28:41 -0700 'nother comment' d5eb26e d5eb26e49fc9dceee9b9f5a2d8fa052bff2cfbbc Mike Slinn 2018-10-13 18:16:20 -0700 'no comment' d8a4992 d8a4992df208ba5efb50728311820bdad5ba5332 Mike Slinn 2018-10-13 12:02:00 -0700 'commented'

Date to search for commits:
Mike Slinn
la source