분명히 이것은 :
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
커미터 날짜를 기준으로 커밋을 필터링 합니다 . 지정된 작성자 날짜 범위에 대한 커밋을 표시하려면 어떻게해야합니까?
분명히 이것은 :
git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"
커미터 날짜를 기준으로 커밋을 필터링 합니다 . 지정된 작성자 날짜 범위에 대한 커밋을 표시하려면 어떻게해야합니까?
답변:
적어도 Git에서는 할 수 없습니다. (이 질문을 방문하는 다른 사람들에게 알림 : 이것은 작성자 날짜를 보는 것이 아니라 작성자 날짜, a la / 및 / 별로 커밋을 선택 하는 것 입니다. 이러한 선택자는 작성자 날짜가 아닌 커미터 날짜를 사용합니다 . 극단적 인 예로 커밋을 고려하십시오. "지금"으로 만들었으므로 커미터 날짜가 2000 년대로되어 있지만 작성자 날짜 필드에서 1999 년의 어느 날로 거슬러 올라갑니다. 선택 범위가 "세기가 바뀔 때마다"인 경우 -커밋 날짜가 1999 년 이후 10 년 이상인 "지금"이므로이 커밋을 선택합니다.)--since
--after
--until
--before
저는 이것이 Git의 작은 버그라고 생각합니다 : 커미터 날짜 필드를 사용하도록 요청할 수있는 모든 곳에서 작성자 날짜 필드를 사용하도록 요청할 수 있어야합니다. 로그 포맷팅 으로 쉽게 할 수 있습니다. 왜냐하면 우리는 %ad
and %cd
등 을 가지고 있기 때문입니다 . 하지만 커밋 선택으로는 불가능 합니다. 가장 가까운 것은 git rev-list
작성자-날짜별로 정렬 할 수 있다는 것입니다 (일반적인 topo 정렬 내에서).
글로벌 스위치는 git rev-list
같은 --use-author-date
간단한 패치로 일 것이고, 힘내에 추가 너무 어렵지 않을 것입니다,하지만 난 그것을 가지고 더 좋을 거라 생각 --min-author-age
하고 --max-author-age
또는 유사하고, "일종의 저자 날짜를 기준으로"플래그 (독립적 일반 --topo-order
플래그이므로 두 플래그를 모두 설정 하면)와 동일한 효과가 --author-date-order
있습니다.
해결 방법으로, 당신은 (모든 잠재적으로 흥미 커밋을 나열 할 수 있습니다 git rev-list
와 같은, 또는 이에 상응 git log
: 지정 날짜 필터를 제외하고, 커밋 잠재적으로 재미있는 무엇이든지 사용 : 그냥이 경우 --all
)와 함께 (자신의 작성자 날짜 모든 필드를 추출 git log --format=%at
또는 무엇이든), 커밋 ID 목록을 직접 잘라낸 다음 나머지 커밋 ID를 git log --no-walk
. 그러나 이것은 기껏해야 고통 스럽습니다. 자세한 내용은 awk 를 사용하는 Tim Beigeleisen의 답변을 참조하십시오 .
뭔가 빠졌을 수도 있지만 이것으로 충분하지 않을까요?
git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"
여기도 참조
%ad
지시문은 2016 년 이전에 작성되었지만 1999 년에 작성된 커밋을 보여줍니다!
당신 은 할 수 있습니다 .
그러나 @torek이 언급했듯이 순수한 Git으로는이 작업을 수행하지 못할 수도 있습니다. 한 가지 옵션은 예쁜 형식의 출력을에서 git log
로 파이프 awk
하고 작성자 날짜를 확인하는 것입니다.
git log --date=iso --pretty=format:'%ad%x08%aN' | awk '$0 >= "2013-01-01" && $0 <= "2013-12-01"'
여기서는 %ad
ISO 형식으로 작성자 날짜를 %aN
제공하고 작성자 이름을 제공합니다.
위의 Tim Biegeleisen의 답변에서 영감을 얻었습니다.
git log --all --date=iso --pretty=format:'%ad%x08%aN %s' | grep 2020-06-09 | sort -u
내가 필요한 일을했습니다. 나는 리베이스와 스쿼시를 많이하기 때문에 날짜를 커밋하지 않고 저자의 날짜를 원합니다. 하지만 가져 오기 커밋에 중요한 날짜를 유지합니다.
이와 관련하여 저자의 이메일을 재설정 할 수있는 작은 도우미가 있지만 원래 저자의 날짜는 유지합니다. --reset-author는 기본적으로 작성자의 날짜를 덮어 씁니다.
https://github.com/mathieujobin/git-scripts/blob/master/bin/git-reset-author-but-not-date
위의 git 로그에서 필요한 경우 추가 %H
하여 gitsha를 얻을 수 있습니다.
git log --all --date=iso --pretty=format:'%ad - %aN : %s' | grep 2020-09 | sort -u