2012-08-08 12 views
53

Ho Lookup miei ceppi Git e scoprire che l'AuthorDate e CommitDate è leggermente diverso per alcuni dei miei commit:Perché git AuthorDate è diverso da CommitDate?

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

L'Autore e impegnarsi è lo stesso di me.

Come si verifica? Sono perplesso per giorni.

ci sono più (accade 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   | 
+------------------------------+-------------------------------+ 
+0

Hmm, sembra che accada quando fusione di filiali. – fossilet

+1

Correlato: http://stackoverflow.com/questions/18750808/difference-between-author-and-committer-in-git –

risposta

83

note quando questo commit è stato originariamente creato (vale a dire quando hai finito il git commit). Secondo i documenti di git commit, la data dell'autore può essere sostituita utilizzando lo switch --date.

La data di commit viene modificata ogni volta che si modifica il commit, ad esempio quando si esegue il ribosamento del 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 proprio git commit, la data di commit verrà impostata su tale data quando la patch viene applicata nell'altro repository.

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

Questo è anche menzionato nella Git Book:

Ci si potrebbe chiedere quale sia la differenza tra il autore e committer. L'autore è la persona che ha originariamente scritto la patch, mentre il committer è la persona che ha applicato la patch l'ultima volta. Quindi, se si invia una patch a un progetto e uno dei membri principali applica la patch, entrambi ottengono credito — come autore e come membro principale come committer

+0

Il mio caso si verifica quando si uniscono i rami? – fossilet

+1

No. Credo che la data faccia parte dello SHA, quindi, a meno che non si esegua qualche operazione che riscrive la cronologia, come la ridefinizione, non dovrebbe cambiare. – asmeurer

+0

Una breve descrizione di come dovremmo aspettarci che i timestamp cambino dopo un cherry-pick, dopo aver modificato o ribasato gli antenati del commit, sarebbe opportunamente apprezzato. Giocare con 'git show -s --format =" commit% cD autore% aD "HEAD', sembrerebbe che, ad esempio, modificare il messaggio di commit con' git gui' aggiorna entrambi, ma 'git commit - -amend' aggiorna solo la data del commit. poco intuitivo. –

10

La data autore su un commit è conservato il rebase/cherry-pick ecc, ma la data di commettere è cambiato.

+0

Alcuni commit in questione non sono né cherry-picking né rebasing. Sembrano unire un altro ramo. – fossilet

+5

Così fa 'git commit --amend'. – asmeurer

Problemi correlati