Perché git AuthorDate è diverso da CommitDate?

Cerco i miei log git e trovo che AuthorDate e CommitDate sono leggermente diversi per alcuni dei miei commit:

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

L’autore e il commit è lo stesso di me.

Come succede? Sono perplesso per giorni.

Ce ne sono altri (succede in 17 su 341 commit):

 +------------------------------+-------------------------------+ | from_unixtime(authored_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 | +------------------------------+-------------------------------+ 

Le note sulla data dell’autore quando questo commit è stato originariamente creato (cioè quando hai finito il git commit ). Secondo i documenti di git commit , la data dell’autore potrebbe essere sovrascritta usando l’ --date .

La data di commit viene cambiata ogni volta che il commit viene modificato, ad esempio quando si ridefinisce il ramo in cui si trova il commit su un altro ramo.

Lo stesso potrebbe accadere se si esegue il commit e si invia la patch a un altro per applicare la patch in un altro repository: la data dell’autore sarà la data del git commit , la data di commit sarà impostata a quella data quando la patch è applicato nell’altro repository.

Se si invia la patch a due colleghi, ci sarà una data dell’autore ma due date di commit diverse.

Questo è anche menzionato nel Git Book :

Forse ti starai chiedendo quale sia la differenza tra autore e committer . L’ autore è la persona che ha originariamente scritto la patch, mentre il committer è la persona che ha applicato la patch per ultima. Quindi, se invii una patch a un progetto e uno dei membri principali applica la patch, entrambi ti accreditano: tu come autore e il membro principale come il committer

La data dell’autore su un commit viene mantenuta su rebase / cherry-pick ecc. Ma la data di commit viene cambiata.