Tại sao git AuthorDate khác với commitDate?


102

Tôi tra cứu nhật ký git của mình và thấy rằng Ngày tác giả và Ngày cam kết hơi khác nhau đối với một số cam kết của tôi:

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

Tác giả và Cam kết giống tôi.

Làm thế nào điều này xảy ra? Tôi phân vân nhiều ngày.

Còn nữa (xảy ra ở 17 trong số 341 lần cam kết):

+------------------------------+-------------------------------+
| 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, nó có vẻ như xảy ra khi hợp nhất các chi nhánh.
Fish Monitor


Một tác dụng phụ không mong muốn của việc có hai ngày khác nhau: git logtheo mặc định chỉ hiển thị ngày cam kết của Tác giả. Nhưng nếu bạn sử dụng --since, --until, --before, --after, ngày tương đối, sử dụng git các committer ngày cam kết thay! git log --since="yesterday"có thể không hiển thị các kết quả mong đợi nếu Author cam kết ngày khác với committer ngày cam kết.
SherylHohman

Về việc liệu hợp nhất có thể thay đổi ngày tháng hay không, nó có thể phụ thuộc vào việc liệu hợp nhất có được định cấu hình theo một số cách không mặc định để sửa đổi các cam kết hay không. Ví dụ: git --squash mergelà một chiến lược hợp nhất hơi phổ biến có thể được định cấu hình (mặc dù có vẻ như nó không được sử dụng ở đây, nhưng nó được đưa ra vì lợi ích của ví dụ). Ngoài ra, nếu git đang được sử dụng thông qua IDE hoặc git GUI, có khả năng cấu hình / chức năng không có trong CLI. Có thể đáng để kiểm tra kỹ xem hợp nhất của bạn được định cấu hình để làm gì trong môi trường bạn thực hiện hợp nhất.
George Pantazes

Câu trả lời:


160

Ngày tác giả ghi chú thời điểm thực hiện cam kết này ban đầu (tức là khi bạn hoàn thành git commit). Theo tài liệu của git commit, ngày của tác giả có thể bị ghi đè bằng cách sử dụng công --datetắc.

Ngày cam kết được thay đổi mỗi khi cam kết được sửa đổi, ví dụ như khi khôi phục lại nhánh có cam kết trên một nhánh khác ( nhiều hơn ).

Điều tương tự cũng có thể xảy ra nếu bạn thực hiện cam kết của mình và gửi bản vá của mình cho một người khác để áp dụng bản vá trong một repo khác: ngày tác giả sẽ là ngày của bạn git commit, ngày cam kết sẽ được đặt thành ngày đó khi bản vá được áp dụng trong repo khác.

Nếu bạn gửi bản vá cho hai đồng nghiệp, sẽ có một ngày tác giả nhưng hai ngày cam kết khác nhau.

Điều này cũng được đề cập trong Sách Git :

Bạn có thể tự hỏi sự khác biệt giữa tác giả và người cam kết là gì . Các tác giả là người ban đầu đã viết các bản vá, trong khi có duyên là người cuối cùng áp dụng các bản vá. Vì vậy, nếu bạn gửi bản vá cho một dự án và một trong những thành viên cốt lõi áp dụng bản vá, cả hai bạn đều nhận được tín dụng - bạn với tư cách là tác giả và thành viên cốt lõi là người cam kết


Liệu trường hợp của tôi có xảy ra khi hợp nhất các chi nhánh không?
Fish Monitor

3
Không. Tôi tin rằng ngày là một phần của SHA, vì vậy trừ khi bạn thực hiện một số thao tác viết lại lịch sử, chẳng hạn như khôi phục, thì ngày đó sẽ không thay đổi.
asmeurer

2
Mô tả ngắn gọn về cách chúng ta nên mong đợi các dấu thời gian thay đổi sau khi chọn anh đào, sau khi sửa đổi hoặc khôi phục tổ tiên của cam kết sẽ được đánh giá đúng mức. Chơi xung quanh với git show -s --format="commit %cD author %aD" HEAD, có vẻ như, ví dụ, sửa đổi cam kết thông báo với git guithông tin cập nhật cả hai, nhưng git commit --amendchỉ cập nhật ngày committer. không trực quan.
init_js

24

Ngày của tác giả trên một cam kết được giữ nguyên trên rebase / cherry-pick, v.v. Nhưng ngày cam kết được thay đổi.


Một số cam kết được đề cập không phải là hái anh đào hoặc đang phục hồi. Họ trông giống như hợp nhất một nhánh khác.
Fish Monitor

7
Cũng vậy git commit --amend.
asmeurer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.