2017-12-29 51 views
1

다음 경우 " 는"내가 한 일 2017년 12월 22일 ( 4b9273bda1680867)가 커밋 표시되지 --before. 하지만 내가 git log --before '2017-12-28 00:00'을 실행하면 가장 최근 결과는 017-12-19 (부모 중 하나 인 599241c3003)입니다. 자식 로그는 다른 커밋 중 하나 이상 된 <date>

나는이 쿼리 일 (599241c3003)보다 최신 조상을 가진 4b9273bda1680에 의해 발생하지만이 동작을 설명하는 모든 문서를 찾을 수 없습니다 용의자.

* commit 1a5b54d74c6130fae9806a8716744801e2152270 (HEAD -> _) 
    |\ Merge: 599241c 872e57d 
    | | Date: Thu Dec 28 11:01:53 2017 +0100 
    | | 
    | * commit 872e57d860aa4323b394cd63cc050d4746600d93 
    | | Date: Thu Dec 28 10:58:43 2017 +0100 
    | | 
    | * commit 648833bd98e724e53697e2a4c2b765a1c23360ee 
    | | Date: Wed Dec 27 09:03:52 2017 +0100 
    | | 
    | * commit 4b9273bda16808672d6a484c5ddf7ba7e4b6a4be 
    |/ Date: Fri Dec 22 17:41:21 2017 +0100 
    | 
    * commit 599241c3003e848fefc7316dbff6b64e75fbd744 
    |\ Merge: 42507fd 069a9d3 
    | | Date: Thu Dec 28 11:00:45 2017 +0100 
+2

'--before'는 커밋 시간에 작동합니다. 그러나'git log'는 기본적으로 작성자 시간 만 표시합니다. –

+1

@ RaymondChen이 말한 것 중 가장 가능성이 높습니다. 확인하려면'git log -1 --pretty = fuller 4b9273bda1680867'을 실행하여 포함되지 않아 포함되어야한다고 생각되는 작성자와 커미터 날짜를 모두 봅니다. – torek

답변

0

@RaymondChen 및 @torek는 커밋과 관련하여 2 개의 날짜가 있습니다. "작성자"날짜는 처음에 git commit을 실행 한 순간을 나타내며 "커밋"날짜는 커밋의 재 적용을 타임 스탬프합니다 (예 : --amend s, rebase ...). MicrosoftDocs#git-dates에서 자세한 내용을 볼 수 있습니다. git log -1 --pretty=fuller 4b927

출력 : 또한 Git log: filter by commit's author dategit log에 따라

commit 4b9273bda16808672d6a484c5ddf7ba7e4b6a4be 
... 
AuthorDate: Fri Dec 22 17:41:21 2017 +0100 
... 
CommitDate: Thu Dec 28 11:01:29 2017 +0100 

(는 출력의 기본 비록) 저자의 날짜를 기준으로 필터링 할 수 없습니다. 작성자의 날짜로 필터링하는 유일한 방법은 스크립팅 마법을 사용하는 것입니다. 내 bash는 구현 :

# git-author-date-before() 
# ------------------------ 
# args: 
# $1 - unix timestamp for limiting date 
# [email protected] - any additional arguments will be passed to `git show`. 
# example usages: 
# 
# git-author-date-before 1514415600 
# git-author-date-before $(date -j -f '%Y %m %d %H %M %S' '2017 12 23 00 00 00' '+%s') --pretty=fuller 
# 
function git-author-date-before() { 
    END_TIMESTAMP="$1"; shift; 
    git log --format="%at %H" \ 
    | sort -r \ 
    | awk -v t1=$END_TIMESTAMP '$1 <= t1 { print; }' \ 
    | cut -d ' ' -f 2 \ 
    | xargs git show "[email protected]" 
} 

는 위의 예는 당신이 일반적으로 리눅스 시스템에서 찾을 GNU date와 호환되지 않는 BSD date 유틸리티를 사용하여 OSX에서 테스트되었습니다 조심하십시오.