Git AuthorDate, CommitDate'ten neden farklı?


102

Git günlüklerime baktım ve bazı taahhütlerim için AuthorDate ve CommitDate'in biraz farklı olduğunu görüyorum:

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

Yazar ve Taahhüt aynı benim.

Bu nasıl olur? Günlerdir şaşkınım.

Daha fazlası var (341 işlemin 17'sinde gerçekleşiyor):

+------------------------------+-------------------------------+
| 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, dalları birleştirirken oluyor gibi görünüyor.
Balık Monitör


Bu iki farklı tarihe sahip olmanın beklenmedik bir yan etkisi: git logvarsayılan olarak yalnızca Yazar taahhüt tarihini gösterir. Kullanmak Ama eğer --since, --until, --before, --after, bağıl tarihleri, git kullanımları committer yerine tarihini işlemek! git log --since="yesterday"eğer beklenen sonuçları göstermeyebilir Yazar tarih farklıdır taahhüt committer tarihini işlemek.
SherylHohman

Birleştirmenin tarihleri ​​değiştirip değiştiremeyeceği hakkında, birleştirmenin taahhütleri değiştiren varsayılan olmayan bir şekilde yapılandırılıp yapılandırılmadığına bağlı olabilir. Örneğin, git --squash mergeyapılandırılabilen biraz yaygın bir birleştirme stratejisidir (burada kullanılıyor gibi görünmese de, örnek olması için getirilmiştir). Ayrıca, git bir IDE veya git GUI aracılığıyla kullanılıyorsa, CLI'de olmayan yapılandırma / işlevsellik olasılığı vardır. Birleştirme işleminizin, birleştirmeyi gerçekleştirdiğiniz ortamda ne yapacak şekilde yapılandırıldığını iki kez kontrol etmeye değer olabilir.
George Pantazes

Yanıtlar:


160

Yazar tarih (eğer bittiğinde yani bu taahhüt notlar başlangıçta yapıldı git commit). Dokümanlarına göre git commit, yazar tarihi --dateanahtar kullanılarak geçersiz kılınabilir .

Taahhüt tarih başka dalı (açık olduğunu taahhüt şube rebasing zaman örneğin, modifiye ediliyor taahhüt her zaman değişmiş olur daha ).

Yamayı başka bir depoya uygulamak için taahhüdünüzü yapar ve yamanızı başka birine gönderirseniz de aynı şey olabilir: yazar tarihi sizin git committarihiniz olacak, taahhüt tarihi yamanın uygulandığı tarihe ayarlanacaktır. diğer depo.

Yamayı iki meslektaşınıza gönderirseniz, bir yazar tarihi ancak iki farklı teslim tarihi olacaktır.

Buna Git Kitabında da bahsediliyor :

Yazar ile kaydedici arasındaki farkın ne olduğunu merak ediyor olabilirsiniz . Yazar , oysa başlangıçta yama yazdı kişidir committer son yama uygulanan kişidir. Yani, bir projeye bir yama gönderirseniz ve çekirdek üyelerden biri yamayı uygularsa, ikiniz de kredi alırsınız - yazar olarak siz ve kaydedici olarak çekirdek üye


Benim durumum şubeleri birleştirirken olacak mı?
Balık Monitör

3
Hayır. Tarihin SHA'nın bir parçası olduğuna inanıyorum, bu nedenle yeniden adlandırma gibi geçmişi yeniden yazan bir işlem yapmazsanız, tarih değişmemelidir.
asmeurer

2
Taahhüdün atalarını değiştirdikten veya yeniden sıraladıktan sonra zaman damgalarının nasıl değişmesini beklememiz gerektiğine dair kısa bir açıklama gerektiği gibi takdir edilecektir. Uğraşırken git show -s --format="commit %cD author %aD" HEAD, onunla mesajı işlemek değiştiren, örneğin, gibi görünüyor git guigüncellemeleri hem fakat git commit --amendsadece committer tarihini günceller. sezgisel değil.
init_js

24

Bir taahhüdün yazar tarihi, yeniden ödeme / kiraz çekme vb. Üzerinde korunur. Ancak taahhüt tarihi değiştirilir.


Söz konusu bazı taahhütler, kiraz toplama veya yeniden satış değildir. Başka bir dalı birleştiriyor gibi görünüyorlar.
Balık Monitör

7
Öyle git commit --amend.
asmeurer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.