¿Por qué git AuthorDate es diferente de CommitDate?

Busco mis loggings de git y encuentro que AuthorDate y CommitDate son ligeramente diferentes para algunos de mis commits:

commit 3a5912f90dc5227f308e99f95152fbee2301c59a Author: <hidden> AuthorDate: Fri Jun 15 10:57:22 2012 +0800 Commit: <hidden> CommitDate: Fri Jun 15 11:14:37 2012 +0800 

El autor y el compromiso son el mismo yo.

¿Como sucedió esto? Estoy desconcertado por días.

Hay más (ocurre en 17 de las 341 confirmaciones):

 +------------------------------+-------------------------------+ | from_unixtime(authonetworking_date) | from_unixtime(committed_date) | +------------------------------+-------------------------------+ | 2012-06-15 10:57:22 | 2012-06-15 11:14:37 | | 2012-06-15 14:39:54 | 2012-06-15 14:48:57 | | 2012-06-19 12:28:21 | 2012-06-19 12:29:41 | | 2012-06-21 18:16:25 | 2012-06-21 18:28:48 | | 2012-06-26 17:30:54 | 2012-06-26 17:33:55 | | 2012-07-13 11:41:43 | 2012-07-13 11:42:17 | | 2012-07-13 11:56:02 | 2012-07-13 12:13:22 | | 2012-07-13 12:05:09 | 2012-07-13 12:12:24 | | 2012-07-12 18:38:49 | 2012-07-13 12:26:35 | | 2012-07-13 11:00:47 | 2012-07-13 12:25:15 | | 2012-07-16 14:10:54 | 2012-07-16 14:15:01 | | 2012-07-13 12:56:51 | 2012-07-16 13:49:48 | | 2012-07-16 14:10:54 | 2012-07-16 14:19:46 | | 2012-07-24 16:05:05 | 2012-07-24 16:05:48 | | 2012-07-24 17:42:58 | 2012-07-24 17:43:33 | | 2012-07-24 17:42:58 | 2012-07-24 17:45:18 | | 2012-07-26 16:55:40 | 2012-07-26 16:55:53 | +------------------------------+-------------------------------+ 

Las notas de date del autor cuando este compromiso se realizó originalmente (es decir, cuando finalizó la git commit ). De acuerdo con los documentos de git commit , la date del autor podría --date usando el --date .

La date de confirmación se cambia cada vez que se modifica la confirmación, por ejemplo, al volver a establecer la base de la bifurcación donde está la confirmación en otra sucursal.

Lo mismo podría suceder si realiza su confirmación y envía el parche a otro para aplicar el parche en otro repository: la date de autor será la date de su git commit , la date de confirmación se establecerá en esa date cuando el parche esté aplicado en el otro repository.

Si envía el parche a dos colegas, habrá una date de autor pero dos dates de confirmación diferentes.

Esto también se menciona en el Libro de Git :

Usted se estará preguntando cuál es la diferencia entre autor y committer . El autor es la persona que originalmente escribió el parche, mientras que el autor es la persona que aplicó el parche por última vez. Por lo tanto, si envía un parche a un proyecto y uno de los miembros principales aplica el parche, ambos obtienen crédito: usted como autor y el miembro principal como el autor del contrato.

La date del autor en una confirmación se conserva en rebase / cherry-pick, etc. Pero la date de confirmación se modifica.