¿Cómo veo todos los commits para un día específico?

188

Ya he visto los documentos relevantes de git-scm.com y gitref.org , pero parece que no puedo entender esto.

Digamos que quiero obtener todos los commits para el martes 12 de noviembre de 2013. Usando un repositorio existente como ejemplo, sé con certeza que tengo commits ese día, así como los commits el día anterior y el día posterior.

Con 2013-11-11y2013-11-12

Todo lo siguiente me da compromisos para el 11 y 12 de noviembre:

  • 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"

Con 2013-11-12solo

Todo lo siguiente no me da confirmaciones:

  • 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"

Con 2013-11-12y2013-11-13

Como era de esperar (a partir de los resultados de 2013-11-11y 2013-11-12por encima), todos de la siguiente me dan los resultados de ambos días 12 y 13 de noviembre:

  • 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"

...y así sucesivamente y así sucesivamente. Siento que he probado todas las combinaciones posibles de since, after, before, y untilaunque todavía no puede encontrar la respuesta, ni me entiendo si estas opciones están incluidas o excluidas, ya que parecen ser incluido si las dos fechas son diferentes, pero exclusivo si están en el mismo día. ¿Me perdí algo / qué estoy haciendo mal?

3cheesewheel
fuente
8
He encontrado git desde / después / hasta / antes de manejar muy raro, así que no sé la respuesta, pero ¿has intentado especificar fecha + hora (por ejemplo, --since = "2013-11-12 00:00 ")? Además, ¿tiene (cualquiera de) sus confirmaciones fechas diferentes de confirmador frente a autor?
John Bartholomew
¡Lo tienes! Especificando el tiempo trabajado. Ni siquiera se me ocurrió intentarlo con un tiempo. ¡Gracias! En cuanto a las fechas de confirmación contra autor: no se aplicaron parches durante esas fechas, por lo que no fue así.
3cheesewheel
Me parece que 'git log --boundary' debería hacer esto por usted, de modo que 'git log --boundary --after = "2013-11-12" --before = "2013-11-12"' mostraría exactamente un commit (el que crees que sería :)).
qneill

Respuestas:

231

Gracias John Bartholomew!

La respuesta es especificar el tiempo, por ej. git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"

3cheesewheel
fuente
12
Agradable. Sin embargo, ese comando omitirá confirmaciones entre las 23:59 y las 00:00 del día siguiente, por git log --after="2013-11-12 00:00" --before="2013-11-13 00:00"lo tanto, es mejor. Creo gitk --since="2013-11-12 00:00" --until="2013-11-13 00:00" &que también funcionaría si tienes instalado gitk.
HelloGoodbye
66
En git 2.13.0. git log --after="2017-07-25" --before="2017-07-26"da resultados válidos para mí
powlo
1
¿Es esto para la rama actual? ¿Cómo ver a través de todas las ramas?
nawfal
Esta es la respuesta correcta, pero todavía estoy desconcertado y publiqué esta pregunta de seguimiento: stackoverflow.com/questions/59691065/…
bgoodr
28

Por lo general, reviso mi registro de git y veo lo que estaba trabajando en un día específico y actualizo mi hoja de tiempo en función de eso, pero es una molestia escribir la fecha completa en formato ISO, así que lo hago así

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

y agrego --authorpara imprimir solo mis confirmaciones

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

Esto imprime los compromisos que ocurrieron el pasado 9 de junio (así que para 2016 en este caso y no para 2015 o 2014, etc.).

Las --since/--aftery los --until/--beforeparámetros también pueden tomar cosas por el estilo 3 days ago, yesterdayetc.

Kohányi Róbert
fuente
Simplemente no funciona, no genera nada. ¿Me estoy perdiendo algo? ¿Debo especificar una rama?
Aurimas
1
@Aurimas Bueno, no estoy seguro de qué salió mal de tu parte. Si sus valores sincey untilno son correctos, no obtendrá ningún resultado seguro. Utilice git logprimero, y tratar de recoger una sincey untilvalor en función de lo que se ve. No se requiere sucursal ni nada especial. No estoy seguro desde qué versión de Git está disponible esta característica. Asegúrese de tener también una versión reciente.
Kohányi Róbert
66
Tuve que usar espacios:git log --after="may 2" --before="may 3"
Connor Clark
16

No hay nada malo con la respuesta aceptada (que voté), pero ... ¡estamos aquí por la ciencia!

La salida a continuación se puede ampliar / personalizar con pretty=format:<string> marcadores de posición :

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

No es 100% inmune a errores, ya que un usuario podría haber ingresado la misma cadena. Pero aceptable dependiendo de qué marcadores de posición se usen. El fragmento anterior no fallaría, por ejemplo.

Uno puede que también acaba de analizar el conjunto git logde JSONy consumir / manipular sus datos al contenido del corazón de uno. ¡Visite https://github.com/dreamyguy/gitlogg y nunca mire hacia atrás!

Descargo de responsabilidad: ese es uno de mis proyectos.

Wallace Sidhrée
fuente
10

Hice un alias git para ese propósito específico:

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"

Uso:

git commitsAtDate 2017-08-18
Michael Große
fuente
1
también puede especificar las fechas relativas a este alias, es decir git commitsAtDate yesterday, 2 days ago, etc.
voiger
-2

Este script muestra el rango de fechas disponibles de confirmaciones para el repositorio actual, luego solicita la fecha desde la que desea ver las confirmaciones. Muestra un SHA corto y el SHA completo, el autor, la marca de tiempo de confirmación y los comentarios entre comillas simples.

El script sigue solicitando fechas hasta que presione Entrar o Control-D.

Usuarios de Mac: requiere fecha 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

Llamé el guión commitsOnDates, y aquí está en acción. La primera fecha que ingreso no tiene confirmaciones, por lo que la respuesta es solo una línea vacía:

$ 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
fuente