git AuthorDate가 CommitDate와 다른 이유는 무엇입니까?


102

내 자식 로그를 조회하고 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

저자와 커밋은 저와 같습니다.

어떻게 이런 일이 발생합니까? 나는 며칠 동안 의아해합니다.

더 있습니다 (341 개 커밋 중 17 개에서 발생) :

+------------------------------+-------------------------------+
| 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, 상대 날짜는 자식 사용하는 커미터 대신 날짜를 저지! 작성자 커밋 날짜가 커미터 커밋 날짜 와 다른 git log --since="yesterday"경우 예상 결과가 표시되지 않을 수 있습니다 .
SherylHohman

병합이 날짜를 변경할 수 있는지 여부는 병합이 커밋을 수정하는 기본이 아닌 방식으로 구성되었는지 여부에 따라 달라질 수 있습니다. 예를 들어, git --squash merge구성 할 수있는 다소 일반적인 병합 전략입니다 (여기서 사용되는 것처럼 보이지는 않지만 예제를 위해 가져 왔습니다). 또한 git이 IDE 또는 git GUI를 통해 사용되는 경우 CLI에 구성 / 기능이 없을 가능성이 있습니다. 병합을 수행하는 환경에서 병합이 수행하도록 구성된 작업을 다시 확인하는 것이 좋습니다.
George Pantazes

답변:


160

저자 날짜 (당신이 완료되면 즉이 커밋 노트는 원래되었다 git commit). 의 문서에 따르면 스위치를 git commit사용하여 작성자 날짜를 재정의 할 수 있습니다 --date.

커밋 날짜 (가) 다른 지점 (에에 커밋 지점을 리베이스 할 때, 예를 들어, 수정하고 커밋 할 때마다 변경됩니다 ).

다른 리포지토리에 패치를 적용하기 위해 커밋하고 패치를 다른 리포지토리에 보내는 경우에도 마찬가지 일 수 있습니다. 작성자 날짜는의 날짜가 git commit되고, 커밋 날짜는 패치가 적용되는 날짜로 설정됩니다. 다른 저장소.

두 동료에게 패치를 보내면 작성자 날짜는 하나이지만 커밋 날짜는 두 개가됩니다.

이것은 Git Book 에도 언급되어 있습니다 .

작성자커미터 의 차이점이 무엇인지 궁금 할 것 입니다. 저자는 반면, 원래 패치를 쓴 사람 커미터가 마지막으로 패치를 적용하는 사람입니다. 따라서 프로젝트에 패치를 보내고 핵심 구성원 중 한 명이 패치를 적용하면 두 사람 모두 크레딧을받습니다. 작성자는 본인이고 커미터는 핵심 구성원입니다.


브랜치를 병합 할 때 제 케이스가 발생합니까?
Fish Monitor

3
아니요. 날짜가 SHA의 일부라고 생각하므로 리베이스와 같이 기록을 다시 쓰는 작업을 수행하지 않는 한 변경해서는 안됩니다.
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.