Pourquoi git AuthorDate est-il différent de CommitDate?

102

Je recherche mes journaux git et constate que AuthorDate et CommitDate sont légèrement différents pour certains de mes 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

L'auteur et le Commit sont le même moi.

Comment cela peut-il arriver? Je suis perplexe pendant des jours.

Il y en a d'autres (se produit dans 17 commits sur 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           |
+------------------------------+-------------------------------+
Moniteur de poissons
la source
Hmm, cela semble se produire lors de la fusion de branches.
Fish Monitor
1
En relation: stackoverflow.com/questions/18750808/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Un effet secondaire inattendu de ces deux dates différentes: git logpar défaut, affiche uniquement la date de validation de l'auteur. Mais si vous utilisez --since, --until, --before, --after, les dates relatives, les utilisations git les committers engagent ce jour à la place! git log --since="yesterday"peut ne pas afficher les résultats attendus si l' auteur engage la date est différente de la Committer date de commettre.
SherylHohman
Quant à savoir si la fusion peut modifier les dates, cela peut dépendre du fait que la fusion est configurée d'une manière non par défaut qui modifie les validations. Par exemple, git --squash mergeest une stratégie de fusion assez courante qui peut être configurée (bien qu'elle ne semble pas être utilisée ici, elle est évoquée à titre d'exemple). De plus, si git est utilisé via un IDE ou une interface graphique git, il est possible que la configuration / fonctionnalité ne soit pas présente dans la CLI. Cela peut valoir la peine de vérifier à nouveau ce que votre fusion est configurée pour faire dans l'environnement dans
lequel

Réponses:

160

La date de l'auteur indique la date initiale de cette validation (c'est-à-dire lorsque vous avez terminé le git commit). Selon la documentation de git commit, la date de l'auteur peut être remplacée à l'aide du --datecommutateur.

La date de validation est modifiée à chaque fois que la validation est modifiée, par exemple lors du rebasage de la branche où se trouve la validation sur une autre branche ( plus ).

La même chose pourrait arriver si vous effectuez votre commit et envoyez votre patch à un autre afin d'appliquer le patch dans un autre repo: la date de l'auteur sera la date de votre git commit, la date de commit sera fixée à cette date lorsque le patch sera appliqué dans l'autre repo.

Si vous envoyez le patch à deux collègues, il y aura une date d'auteur mais deux dates de validation différentes.

Ceci est également mentionné dans le livre Git :

Vous demandez peut - être ce que la différence entre l' auteur et committers . L' auteur est la personne qui a écrit le patch à l'origine, tandis que le validateur est la dernière personne qui a appliqué le patch. Ainsi, si vous envoyez un correctif à un projet et que l'un des membres principaux applique le correctif, vous en avez tous les deux le mérite - vous en tant qu'auteur et le membre principal en tant que committer.

eckes
la source
Mon cas se produira-t-il lors de la fusion de succursales?
Fish Monitor
3
Non. Je crois que la date fait partie du SHA, donc à moins que vous n'effectuiez une opération qui réécrit l'histoire, comme le rebasage, cela ne devrait pas changer.
asmeurer
2
Une brève description de la façon dont nous devrions nous attendre à ce que les horodatages changent après une sélection, après avoir modifié ou rebasé les ancêtres du commit serait dûment appréciée. En jouant avec git show -s --format="commit %cD author %aD" HEAD, il semblerait que, par exemple, modifier le message de validation avec les git guideux mises à jour, mais git commit --amendne met à jour que la date de validation . peu intuitif.
init_js
24

La date de l'auteur d'un commit est préservée lors du rebase / cherry-pick, etc. Mais la date de commit est modifiée.

Michael Anderson
la source
Certains commits en question ne sont ni une sélection ni un rebasage. Ils ressemblent à la fusion d'une autre branche.
Fish Monitor
7
Il en va de même git commit --amend.
asmeurer