ทำไม Git AuthorDate จึงแตกต่างจาก CommitDate


106

ฉันค้นหาบันทึกคอมไพล์ของฉันและพบว่า AuthorDate และ 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

ผู้เขียนและคำมั่นสัญญาเป็นคนเดียวกันกับฉัน

สิ่งนี้เกิดขึ้นได้อย่างไร? ฉันงงงวยอยู่หลายวัน

ยังมีอีก (เกิดขึ้นใน 17 จาก 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           |
+------------------------------+-------------------------------+

อืมดูเหมือนว่าจะเกิดขึ้นเมื่อรวมสาขา
Fish Monitor


ผลข้างเคียงที่ไม่คาดคิดอย่างหนึ่งของการมีวันที่ต่างกันสองวันนี้: git logโดยค่าเริ่มต้นจะแสดงเฉพาะวันที่คอมมิตของผู้เขียน แต่ถ้าคุณใช้--since, --until, --before, --afterวันที่ญาติใช้คอมไพล์ committer กระทำวันแทน! git log --since="yesterday"อาจไม่แสดงผลที่คาดหวังถ้าผู้เขียนกระทำวันจะแตกต่างจากcommitterกระทำวัน
SherylHohman

เกี่ยวกับว่าการรวมสามารถเปลี่ยนแปลงวันที่ได้หรือไม่อาจขึ้นอยู่กับว่าการผสานถูกกำหนดค่าด้วยวิธีที่ไม่ใช่ค่าเริ่มต้นบางอย่างที่ปรับเปลี่ยนคอมมิต ตัวอย่างเช่นgit --squash mergeเป็นกลยุทธ์การผสานทั่วไปที่สามารถกำหนดค่าได้ (แม้ว่าจะดูเหมือนไม่ได้ใช้ที่นี่ แต่ก็ถูกนำมาใช้เพื่อประโยชน์ในตัวอย่าง) นอกจากนี้หากมีการใช้คอมไพล์ผ่าน IDE หรือ git GUI อาจมีความเป็นไปได้ที่การกำหนดค่า / ฟังก์ชันที่ไม่มีอยู่ใน CLI อาจคุ้มค่าที่จะตรวจสอบอีกครั้งว่าการผสานของคุณได้รับการกำหนดค่าให้ทำอะไรในสภาพแวดล้อมที่คุณทำการผสาน
George Pantazes

คำตอบ:


166

วันที่ผู้เขียนบันทึกนี้เมื่อกระทำในขั้นแรก (เช่นเมื่อคุณจบgit commit) ตามเอกสารวันที่ของgit commitผู้เขียนสามารถแทนที่ได้โดยใช้--dateสวิตช์

วันที่กระทำการได้รับการเปลี่ยนแปลงทุกครั้งที่กระทำจะถูกปรับเปลี่ยนเช่นเมื่อ rebasing สาขาที่กระทำอยู่ในสาขาอื่น ( เพิ่มเติม )

อาจเกิดขึ้นได้หากคุณทำการคอมมิตและส่งแพตช์ของคุณไปยังแพตช์อื่นเพื่อใช้แพตช์ใน repo อื่น: วันที่ผู้เขียนจะเป็นวันที่ของคุณgit commitวันที่คอมมิตจะถูกตั้งค่าเป็นวันนั้นเมื่อมีการใช้แพตช์ repo อื่น ๆ

หากคุณส่งแพตช์ไปยังเพื่อนร่วมงานสองคนจะมีวันที่ของผู้เขียนหนึ่งวัน แต่มีวันที่คอมมิตสองวัน

สิ่งนี้ยังกล่าวถึงในGit Book :

คุณอาจจะสงสัยว่าสิ่งที่แตกต่างระหว่างผู้เขียนและcommitter ผู้เขียนเป็นคนที่ แต่เดิมเขียนแพทช์ในขณะที่committerเป็นคนที่ใช้ล่าสุดออกแพทช์ ดังนั้นหากคุณส่งแพตช์ไปยังโปรเจ็กต์และสมาชิกหลักคนใดคนหนึ่งใช้แพตช์คุณทั้งคู่จะได้รับเครดิต - คุณในฐานะผู้เขียนและสมาชิกหลักในฐานะผู้คอมมิต


กรณีของฉันจะเกิดขึ้นเมื่อรวมสาขาหรือไม่?
Fish Monitor

3
ไม่ฉันเชื่อว่าวันที่เป็นส่วนหนึ่งของ SHA ดังนั้นหากคุณไม่ดำเนินการบางอย่างที่เขียนประวัติซ้ำเช่นการ rebasing ก็ไม่ควรเปลี่ยนแปลง
asmeurer

2
คำอธิบายสั้น ๆ เกี่ยวกับวิธีที่เราควรคาดหวังว่าการประทับเวลาจะเปลี่ยนแปลงหลังจากเลือกเชอร์รี่หลังจากแก้ไขหรือตำหนิบรรพบุรุษของการกระทำจะได้รับการชื่นชมอย่างเหมาะสม เมื่อลองเล่นgit show -s --format="commit %cD author %aD" HEADดูดูเหมือนว่าจะแก้ไขข้อความคอมมิตด้วยgit guiการอัปเดตทั้งคู่ แต่git commit --amendจะอัปเดตเฉพาะวันที่คอมมิทเทอร์ ไม่เข้าใจง่าย
init_js

24

วันที่ผู้เขียนบนคอมมิตจะถูกเก็บไว้ใน rebase / cherry-pick เป็นต้น แต่วันที่คอมมิตจะเปลี่ยนไป


การกระทำบางอย่างที่เป็นปัญหาไม่ใช่การเก็บเชอร์รี่หรือการลดราคา พวกเขาดูเหมือนการรวมสาขาอื่น
Fish Monitor

7
ก็git commit --amendเช่นกัน
asmeurer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.