Aparentemente esto :
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
los filtros se comprometen en función de la fecha de confirmación . ¿Cómo puedo hacer que muestre confirmaciones para un rango de fechas de autor específico?
Respuestas:
No puedes, al menos, no solo en Git. (Recordatorio para otras personas que visitan esta pregunta: no se trata de ver la fecha del autor, se trata de seleccionar confirmaciones por la fecha del autor, a la
--since
/--after
y--until
/--before
. Estos selectores usan la fecha de confirmación , no la fecha del autor. Considere como un ejemplo extremo una confirmación hecho "ahora", por lo que su fecha de confirmación es en la década de 2000, pero con fecha anterior en el campo de fecha de autor a algún día del año 1999. Si su rango de selección es "en cualquier momento cerca del cambio de siglo", -seleccione este compromiso, ya que su fecha de compromiso es "ahora", más de una década después de 1999.)Considero que esto es un pequeño error en Git: debería poder solicitar que use el campo de fecha del autor en cualquier lugar donde pueda solicitar que use el campo de fecha de confirmación. Esto es fácil con el formato de registro , ya que tenemos
%ad
y%cd
similares, pero es imposible con la selección de confirmación . Lo más cercano que tenemos es quegit rev-list
podemos ordenar por fecha de autor (dentro de la clasificación topográfica general).Un interruptor global en
git rev-list
, como--use-author-date
, funcionaría como un simple parche, y no sería demasiado difícil añadir a Git, pero creo que sería mejor tener--min-author-age
y--max-author-age
o similar y una bandera "ordenar por fecha de autor" (independiente de la--topo-order
bandera general , por lo que la configuración de ambas banderas tiene el mismo efecto que--author-date-order
).Como solución alternativa, puede enumerar todas las confirmaciones potencialmente interesantes (con
git rev-list
o equivalente, comogit log
: use cualquier especificador que haga que las confirmaciones sean potencialmente interesantes, excepto para los filtros de fecha: en este caso, eso es solo--all
) y extraer todos sus campos de fecha de autor (congit log --format=%at
o lo que sea), luego haga su propia poda de la lista de ID de confirmación, luego vuelva a enviar las ID de confirmación restantes agit log --no-walk
. Pero esto es doloroso en el mejor de los casos. Vea la respuesta de Tim Beigeleisen usando awk para más información.fuente
Quizás me estoy perdiendo algo, pero ¿no sería suficiente?
Ver también aquí
fuente
%ad
directiva le mostrará esta confirmación creada en 1999, ¡aunque eso es mucho antes de 2016!Usted puede .
Pero como mencionó @torek, es posible que no pueda hacer esto con Git puro. Una opción sería la de tubo de alguna salida de formato bastante desde
git log
dentroawk
, y comprobar la fecha de autor existe:Aquí,
%ad
le da al autor la fecha en formato ISO y%aN
le da el nombre del autor.fuente
inspirado en la respuesta de Tim Biegeleisen anterior.
git log --all --date=iso --pretty=format:'%ad%x08%aN %s' | grep 2020-06-09 | sort -u
Hice lo que necesitaba. Quiero la fecha del autor, no la fecha de los compromisos porque reafirmo y aplasto mucho. pero guardo fechas importantes en las confirmaciones de importación.
relacionado con eso, tengo un pequeño ayudante que me permite restablecer el correo electrónico del autor pero manteniendo la fecha del autor original. --reset-author por defecto sobrescribe la fecha del autor.
https://github.com/mathieujobin/git-scripts/blob/master/bin/git-reset-author-but-not-date
en el registro de git anterior, cuando sea necesario, puede agregar
%H
para obtener el gitshafuente
git log --all --date=iso --pretty=format:'%ad - %aN : %s' | grep 2020-09 | sort -u