Perché git AuthorDate è diverso da CommitDate?


102

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

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

The Author and Commit è lo stesso me.

Come avviene questo? Sono perplesso da giorni.

Ce ne sono di più (accade in 17 commit su 341):

+------------------------------+-------------------------------+
| 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           |
+------------------------------+-------------------------------+

Hmm, sembra che succeda quando si uniscono i rami.
Fish Monitor


Un effetto collaterale inaspettato di avere queste due date diverse: git logper impostazione predefinita mostra solo la data di commit dell'autore. Ma se si utilizza --since, --until, --before, --after, date relative, usi git la Committer impegnano data invece! git log --since="yesterday"potrebbe non mostrare i risultati attesi se la data di commit dell'autore è diversa dalla data di commit del commit.
SherylHohman,

Se l'unione potrebbe alterare le date, potrebbe dipendere dal fatto che l'unione sia configurata in un modo non predefinito che modifica i commit. Ad esempio, git --squash mergeè una strategia di unione piuttosto comune che può essere configurata (sebbene non sembri che venga utilizzata qui, viene visualizzata a scopo di esempio). Inoltre, se git viene utilizzato tramite un IDE o una GUI git, c'è la possibilità di configurazione / funzionalità non presente nella CLI. Potrebbe valere la pena ricontrollare ciò che la tua unione è configurata per fare nell'ambiente in cui esegui l'unione.
George Pantazes

Risposte:


160

La data dell'autore indica quando questo commit è stato originariamente fatto (cioè quando hai finito il git commit). Secondo i documenti di git commit, la data dell'autore potrebbe essere sovrascritta utilizzando l' --dateinterruttore.

La data del commit viene cambiata ogni volta che il commit viene modificato, ad esempio quando si riassegna il ramo in cui si trova il commit su un altro ramo ( altro ).

Lo stesso potrebbe accadere se effettui il tuo commit e invii la tua patch a un altro per applicare la patch in un altro repo: la data dell'autore sarà la data del tuo git commit, la data del commit sarà impostata a quella data in cui la patch viene applicata in l'altro repo.

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

Questo è anche menzionato nel Git Book :

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


Il mio caso si verificherà quando unisco i rami?
Fish Monitor

3
No. Credo che la data faccia parte dello SHA, quindi a meno che tu non esegua qualche operazione che riscrive la cronologia, come il rebase, non dovrebbe cambiare.
asmeurer

2
Una breve descrizione di come dovremmo aspettarci che i timestamp cambino dopo un cherry-pick, dopo la modifica o il rebase degli antenati del commit sarebbe debitamente apprezzata. Giocando con git show -s --format="commit %cD author %aD" HEAD, sembrerebbe che, ad esempio, la modifica del messaggio di commit con git guiaggiornamenti entrambi, ma git commit --amendaggiorni solo la data di commit. poco intuitivo.
init_js

24

La data dell'autore su un commit viene mantenuta su rebase / cherry-pick ecc. Ma la data del commit è cambiata.


Alcuni commit in questione non sono né cherry-picking né rebasing. Sembrano fondere un altro ramo.
Fish Monitor

7
Così fa git commit --amend.
asmeurer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.