¿Cómo hacer que git muestre commits en un range de dates específico para la date del autor?

Aparentemente esto :

git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>" 

filters confirma según la date del committer . ¿Cómo puedo hacer que muestre commits para un range de dates de autor específico?

No puedes, al less, no en Git alon. (Recordatorio para los demás que visitan esta pregunta: no se trata de ver la date de autor, se trata de seleccionar confirmaciones por date de autor, a la --since / --until y --until / --before . Estos selectores usan la date de committer , no es la date del autor. Considere como un ejemplo extremo un compromiso hecho "ahora", de modo que su date de compromiso sea en los años 2000, pero retroactivamente en el campo date de autor hasta algún día en el año 1999. Si su range de selección es "cualquier time cerca del cambio de siglo "se anulará la selección de este compromiso, ya que su date 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 utilice el campo de date de autor en cualquier lugar donde pueda solicitar que use el campo de date de compromiso. Esto es fácil con el formatting de logging , ya que tenemos %ad y %cd y similares, pero es imposible con la selección de confirmación . Lo más parecido que tenemos es que git rev-list puede orderar por date de autor (dentro de la orderación topográfica general).

Un cambio global en git rev-list , como --use-author-date , funcionaría como un simple parche, y no sería demasiado difícil de agregar a Git, pero creo que sería mejor tener --min-author-age y --max-author-age o similar, y una --max-author-age "orderar por date de autor" (independientemente de la --topo-order general --topo-order , por lo que establecer 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, como git log : use cualquier especificador que haga que commit sea potencialmente interesante, excepto para los filters de date: en este caso, simplemente --all ) y extracto todos sus campos de date de autor (con git log --format=%at o lo que sea), luego realice su propia eliminación de la list de ID de confirmación, luego vuelva a enviar los ID de confirmación restantes a git log --no-walk . Pero esto es doloroso en el mejor de los casos. Vea la respuesta de Tim Beigeleisen utilizando awk para get más información.

Tal vez me estoy perdiendo algo, pero ¿no sería esto suficiente?

 git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe" 

Ver también aquí

Tu puedes

Pero como mencionó @torek, es posible que no puedas hacer esto con Git puro. Una opción sería canalizar algún resultado de formatting bonito desde el git log a awk , y verificar la date del autor allí:

 git log --date=iso --pretty=format:'%ad%x08%aN' | awk '$0 >= "2013-01-01" && $0 <= "2013-12-01"' 

Aquí, el %ad da la date del autor en formatting ISO y %aN da el nombre del autor.