작성자 날짜에 대해 지정된 날짜 범위의 커밋을 표시하도록 git을 얻는 방법은 무엇입니까?


86

분명히 이것은 :

git log --all --after="<date> 00:00" --before="<date> 23:59" --author="<author>"

커미터 날짜를 기준으로 커밋을 필터링 합니다 . 지정된 작성자 날짜 범위에 대한 커밋을 표시하려면 어떻게해야합니까?


답변:


41

적어도 Git에서는 할 수 없습니다. (이 질문을 방문하는 다른 사람들에게 알림 : 이것은 작성자 날짜를 보는 것이 아니라 작성자 날짜, a la / 및 / 별로 커밋을 선택 하는 것 입니다. 이러한 선택자는 작성자 날짜가 아닌 커미터 날짜를 사용합니다 . 극단적 인 예로 커밋을 고려하십시오. "지금"으로 만들었으므로 커미터 날짜가 2000 년대로되어 있지만 작성자 날짜 필드에서 1999 년의 어느 날로 거슬러 올라갑니다. 선택 범위가 "세기가 바뀔 때마다"인 경우 -커밋 날짜가 1999 년 이후 10 년 이상인 "지금"이므로이 커밋을 선택합니다.)--since--after--until--before

저는 이것이 Git의 작은 버그라고 생각합니다 : 커미터 날짜 필드를 사용하도록 요청할 수있는 모든 곳에서 작성자 날짜 필드를 사용하도록 요청할 수 있어야합니다. 로그 포맷팅 으로 쉽게 할 수 있습니다. 왜냐하면 우리는 %adand %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의 답변을 참조하십시오 .


1
저의 혼란을 해결 해주신 여러분의 권한에 감사드립니다. 이것은 오랫동안 저를 괴롭 혔으며 기존의 스위치가 아닌 스위치를 찾기 위해 매뉴얼 페이지를 살펴 보는 데 많은 시간을 보냈습니다. 이미 열려있는 버그가 있습니까?
Mr_and_Mrs_D

Git 사람들이 이것을 버그라고 생각하는지 모르겠습니다. 메일 링리스트에 대한 링크는 github.com/git/git 을 참조하십시오 .
torek

124

뭔가 빠졌을 수도 있지만 이것으로 충분하지 않을까요?

git log --pretty=format:"%ad - %an: %s" --after="2016-01-31" --until="2017-03-10" --author="John Doe"

여기도 참조


18
@RossSolomon : 그 저자 날짜 만 에 의해 선택 커미터 날짜입니다. 극단적 인 예를 들어, 작성자 날짜를 1999로 설정하고 커미터 날짜를 2017 년 1 월 1 일로 설정하여 커밋을한다고 가정합니다. 이 %ad지시문은 2016 년 이전에 작성되었지만 1999 년에 작성된 커밋을 보여줍니다!
torek

7
"아마 내가 뭔가 빠졌을지도 몰라" 네, 질문의 전체 요점입니다. 이것은 커밋 날짜를 기준으로 OP 와 똑같은 필터링 방법을 사용 하지만 이미 원하는 것을 필터링 한 후 작성자 날짜를 표시 합니다. 18 명이 어떻게 그렇게 나쁜 독해력을 갖게 되었습니까?
underscore_d

이 명령은 --before 및 --after의 iso-8601 날짜 형식에서 작동하지 않습니다. 저에게 맞는 형식은 "dd-mm-ccyy"입니다.
hktegner

8
이 답변은 일반적으로 유용함에도 불구하고 질문을 해결하지 못하기 때문에 반대 투표합니다.
ravron

2
질문에 대답하지 않더라도이 대답을 우연히 발견하고 비슷하지만 동일하지 않은 문제에 대한 해결책을 찾았 다면 그 대답을 찬성하고 있습니다. 그러나 이것이 그 대답을 받아 들여야한다는 의미는 아니며 누군가 반대 투표를하는 것을 이해합니다.
Mefitico

31

당신 은 할있습니다 .

그러나 @torek이 언급했듯이 순수한 Git으로는이 작업을 수행하지 못할 수도 있습니다. 한 가지 옵션은 예쁜 형식의 출력을에서 git log로 파이프 awk하고 작성자 날짜를 확인하는 것입니다.

git log --date=iso --pretty=format:'%ad%x08%aN' | awk '$0 >= "2013-01-01" && $0 <= "2013-12-01"'

여기서는 %adISO 형식으로 작성자 날짜를 %aN제공하고 작성자 이름을 제공합니다.


1
감사합니다-저는 Torek의 답변을 좀 더 포괄적 인 것으로 받아 들였지만 시작점을 제공하기 위해 귀하의 답변을
찬성했습니다.

2

위의 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를 얻을 수 있습니다.


1
예쁜 형식의 % x08은 백 스페이스 인 ascii 08을 의미하므로 ISO 형식의 작성자 날짜 인 이전 % ad의 마지막 숫자를 먹으므로이 변형을 사용합니다 (작성자 이름 뒤에 콜론 추가).git log --all --date=iso --pretty=format:'%ad - %aN : %s' | grep 2020-09 | sort -u
sicko
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.