Mengapa git AuthorDate berbeda dengan CommitDate?

102

Saya mencari log git saya dan menemukan bahwa AuthorDate dan CommitDate sedikit berbeda untuk beberapa komit saya:

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

Penulis dan Komit sama dengan saya.

Bagaimana ini bisa terjadi? Saya bingung selama berhari-hari.

Ada lagi (terjadi dalam 17 dari 341 komit):

+------------------------------+-------------------------------+
| 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           |
+------------------------------+-------------------------------+
Monitor Ikan
sumber
Hmm, sepertinya terjadi saat menggabungkan cabang.
Fish Monitor
1
Terkait: stackoverflow.com/questions/18750808/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
Satu efek samping yang tidak terduga dari memiliki dua tanggal berbeda ini: git logsecara default hanya menampilkan tanggal pengerjaan Penulis. Tapi jika Anda menggunakan --since, --until, --before, --after, tanggal relatif, penggunaan git commit komit tanggal sebagai gantinya! git log --since="yesterday"mungkin tidak menunjukkan hasil yang diharapkan jika Penulis komit tanggal berbeda dengan pelaku commit komit date.
SherylHohman
Tentang apakah penggabungan dapat mengubah tanggal, ini mungkin tergantung pada apakah penggabungan dikonfigurasi dengan cara non-default yang mengubah komit. Misalnya, git --squash mergeadalah strategi penggabungan yang agak umum yang dapat dikonfigurasi (meskipun sepertinya tidak digunakan di sini, ini dimunculkan sebagai contoh). Selain itu, jika git digunakan melalui IDE atau GUI git, ada kemungkinan konfigurasi / fungsionalitas tidak ada di CLI. Mungkin ada baiknya untuk memeriksa ulang apa yang akan dilakukan penggabungan Anda yang dikonfigurasi di lingkungan tempat Anda melakukan penggabungan.
George Pantazes

Jawaban:

160

Tanggal penulis mencatat ketika komit ini pertama kali dibuat (yaitu ketika Anda menyelesaikan git commit). Menurut dokumen dari git commit, tanggal penulis dapat diganti menggunakan --datesakelar.

Tanggal komit diubah setiap kali komit diubah, misalnya saat melakukan rebasing cabang tempat komit berada di cabang lain ( lebih ).

Hal yang sama bisa terjadi jika Anda membuat komit dan mengirim tambalan Anda ke yang lain untuk menerapkan tambalan di repo lain: tanggal pembuat akan menjadi tanggal Anda git commit, tanggal komit akan disetel ke tanggal itu ketika tambalan diterapkan di repo lainnya.

Jika Anda mengirim tambalan ke dua kolega, akan ada satu tanggal penulis tetapi dua tanggal komit yang berbeda.

Ini juga disebutkan dalam Git Book :

Anda mungkin bertanya-tanya apa perbedaan antara penulis dan pelaku . The Penulis adalah orang yang awalnya menulis patch, sedangkan commit adalah orang yang terakhir diterapkan patch. Jadi, jika Anda mengirim tambalan ke sebuah proyek dan salah satu anggota inti menerapkan tambalan tersebut, Anda berdua mendapatkan kredit - Anda sebagai penulis dan anggota inti sebagai pelaku

eckes
sumber
Apakah kasus saya akan terjadi saat menggabungkan cabang?
Fish Monitor
3
Tidak. Saya yakin tanggal tersebut adalah bagian dari SHA, jadi kecuali Anda melakukan beberapa operasi yang menulis ulang riwayat, seperti rebasing, ini tidak akan berubah.
asmeurer
2
Penjelasan singkat tentang bagaimana kita harus mengharapkan stempel waktu berubah setelah cherry-pick, setelah mengubah, atau men-rebasing leluhur komit akan sangat dihargai. Bermain-main dengan git show -s --format="commit %cD author %aD" HEAD, tampaknya, misalnya, mengubah pesan komit dengan git guimemperbarui keduanya, tetapi git commit --amendhanya memperbarui tanggal komiter. tidak intuitif.
init_js
24

Tanggal pembuat pada komit dipertahankan pada rebase / cherry-pick dll. Tapi tanggal komit diubah.

Michael Anderson
sumber
Beberapa komitmen yang dipermasalahkan bukanlah tindakan memilih ceri atau rebasing. Mereka terlihat seperti menggabungkan cabang lain.
Fish Monitor
7
Begitu juga git commit --amend.
asmeurer