특정 날짜에 대한 모든 커밋을 보려면 어떻게합니까?


188

git-scm.comgitref.org 에서 관련 문서를 이미 살펴 보았지만 이것을 알아낼 수는 없습니다.

2013 년 11 월 12 일 화요일에 대한 모든 커밋을 받고 싶다고 가정 해 보겠습니다. 기존 리포지토리를 예로 들어, 그날 커밋 한 사실과 그 전날과 그 다음날 커밋 한 사실을 알고 있습니다.

2013-11-112013-11-12

다음은 모두 11 월 11 일과 12 일에 대한 커밋을 제공합니다.

  • git log --after="2013-11-11" --until="2013-11-12"
  • git log --since="2013-11-11" --until="2013-11-12"
  • git log --after="2013-11-11" --before="2013-11-12"
  • git log --since="2013-11-11" --before="2013-11-12"

2013-11-12

다음은 모두 커밋을 제공하지 않습니다.

  • git log --since="2013-11-12" --until="2013-11-12"
  • git log --since="2013-11-12" --before="2013-11-12"
  • git log --after="2013-11-12" --until="2013-11-12"
  • git log --after="2013-11-12" --before="2013-11-12"

2013-11-122013-11-13

(의 결과에서 예상대로 2013-11-112013-11-12위), 다음의 모든 날 모두 11 월 12과 13의 결과 제공 :

  • git log --since="2013-11-12" --before="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"
  • git log --since="2013-11-12" --until="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"

... 등등. 나는 가능한 모든 조합을 시도했습니다 같은 느낌 since, after, before,와 until답변을 찾을 수없는 여전히 있지만,도 나는 그들이 두 날짜가 다른 경우 포함 된 것으로 보인다 때문에 그 옵션이 포함 또는 독점인지 이해 할 수 있지만, 그들이 같은 날에 독점적입니다. 내가 뭔가를 놓쳤습니까 / 내가 뭘 잘못하고 있습니까?!


8
나는 git의 이후 / 이후 /까지 / 매우 이상한 나 자신을 처리하기 전에 답을 알지 못하지만 날짜 + 시간을 지정하려고 시도했습니다 (예 : --since = "2013-11-12 00:00 ")? 또한 커밋과 커밋 날짜가 다른 커밋이 있습니까?
존 Bartholomew

맞아요! 작업 시간을 지정했습니다. 시간이 지나도 시도조차되지 않았습니다. 감사! 커미터 대 작성자 날짜-해당 날짜에는 패치가 적용되지 않았으므로 그렇지 않았습니다.
3cheesewheel

'git log --boundary'가이 작업을 수행해야하므로 'git log --boundary --after = "2013-11-12"--before = "2013-11-12"'가 표시됩니다. 정확히 하나의 커밋 (당신이 생각하는 것 :)).
qneill

답변:


231

감사합니다 John Bartholomew!

대답은 시간을 지정하는 것입니다. 예 : git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"


12
좋은. 그러나이 명령은 다음 날 23:59에서 00:00 사이에 커밋을 생략하므로 git log --after="2013-11-12 00:00" --before="2013-11-13 00:00"더 좋습니다. gitk --since="2013-11-12 00:00" --until="2013-11-13 00:00" &gitk를 설치 한 경우에도 효과가 있다고 생각 합니다.
HelloGoodbye

6
자식 2.13.0에서. git log --after="2017-07-25" --before="2017-07-26"나에게 유효한 결과를 제공합니다.
powlo

1
현재 체크 아웃 된 분기에 해당합니까? 모든 지점에서 보는 방법?
nawfal

이것은 정답이지만 여전히 그것에 의해 당황 하고이 후속 질문을 게시했습니다 : stackoverflow.com/questions/59691065/…
bgoodr

28

나는 일반적으로 내 자식 로그를 확인하고 특정 날짜에 작업 한 내용을 확인하고이를 기반으로 작업 표를 업데이트하지만 ISO 형식으로 전체 날짜를 입력하는 것은 고통 스럽습니다.

git log --after=jun9 --before=jun10

--author커밋을 인쇄하기 위해 추가 합니다.

git log --since=jun9 --until=jun10 --author=Robert 

이것은 6 월 마지막 9 일에 발생한 커밋을 인쇄합니다 (이 경우 2016 년, 2015 년 또는 2014 년 등은 아님).

--since/--after--until/--before매개 변수도 같은 물건을 취할 수 3 days ago, yesterday


단순히 작동하지 않고 아무것도 출력하지 않습니다. 아무것도 빠졌습니까? 지점을 지정해야합니까?
Aurimas

1
@ Aurimas 글쎄, 당신의 끝에 무엇이 잘못되었는지 확실하지 않습니다. 귀하의 경우 sinceuntil값이 정확하지 않습니다 당신은 확실히 더 출력이의를 얻을 수 있습니다. git log먼저 사용 하고 보이는 것을 기준으로 a sinceuntil값 을 선택 하십시오. 지점이나 특별한 것이 필요하지 않습니다. 이 기능을 사용할 수있는 Git 버전이 확실하지 않습니다. 최신 버전도 있는지 확인하십시오.
Kohányi Róbert

6
나는 공백을 사용해야했습니다.git log --after="may 2" --before="may 3"
Connor Clark

15

받아 들인 대답에 아무런 문제가 없지만 (우리는 upvoted) 과학을 위해 여기에 있습니다!

아래 출력은 pretty=format:<string> 자리 표시 자로 확장 / 사용자 정의 할 수 있습니다 .

git log --pretty='format:%H %an %ae %ai' | grep 2013-11-12

사용자가 동일한 문자열을 입력했을 때와 같은 오류에 100 % 영향을 미치지 않습니다. 그러나 사용되는 자리 표시 자에 따라 허용됩니다. 예를 들어 위의 스 니펫은 실패하지 않습니다.

또한 전체 내용 git log을 구문 분석 JSON하고 데이터를 마음의 내용으로 소비 / 조작 할 수 있습니다. https://github.com/dreamyguy/gitlogg 를 확인 하고 뒤돌아 보지 마십시오!

면책 조항 : 그것은 내 프로젝트 중 하나입니다.


10

특정 목적을 위해 자식 별칭 을 만들었습니다 .

commitsAtDate = "!f() { git log --pretty='format:%C(yellow)%h %G? %ad%Cred%d %Creset%s%C(cyan) [%cn]' --decorate --after=\"$1 0:00\" --before=\"$1 23:59\" --author \"`git config user.name`\"; }; f"

용법:

git commitsAtDate 2017-08-18

1
또한,이 별명에 즉 상대 날짜를 지정할 수 있습니다 git commitsAtDate yesterday, 2 days ago
voiger

-2

이 스크립트는 현재 리포지토리에 사용 가능한 커밋 날짜 범위를 표시 한 다음 커밋을 보려는 날짜를 묻는 메시지를 표시합니다. 짧은 SHA와 전체 SHA, 작성자, 커밋 타임 스탬프 및 주석을 작은 따옴표로 표시합니다.

Enter 또는 Control-D를 누를 ​​때까지 스크립트는 날짜를 묻는 메시지를 계속 표시합니다.

Mac 사용자 : 날짜가 필요합니다.

#!/bin/bash

COMMITS=`git log --abbrev-commit --pretty="format:%h %H %ai" | sort -k3 -k4`
FIRST=`echo "$COMMITS" | head -n 1`
LAST=`echo "$COMMITS" | tail -n 1`
echo "First commit: $FIRST"
echo "Last commit: $LAST"
printf "Date to search for commits: "
read DATE
while [[ "$DATE" ]]; do
  NEXT_DATE=`date +%Y-%m-%d -d "$DATE +1 day"`
  #echo "Searching for commits from $DATE to $NEXT_DATE"
  echo `git log --after="$DATE" --before="$NEXT_DATE" --pretty="format:%h %H %an %ci '%s'"`
  printf "\nDate to search for commits: "
  read DATE
done

스크립트를 호출 commitsOnDates했는데 여기에서 작동합니다. 입력 한 첫 번째 날짜에는 커밋이 없으므로 응답은 빈 줄입니다.

$ commitsOnDates
First commit: 375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f 2015-08-03 13:37:16 -0700
Last commit: 1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 2018-10-13 21:32:27 -0700
Date to search for commits: 2015-08-13


Date to search for commits: 2015-08-03
375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f Mike Slinn 2015-08-03 13:37:16 -0700 'this is a comment'

Date to search for commits: 2018-10-13
1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 Mike Slinn 2018-10-13 21:32:27 -0700 'a comment' 64d6e16 64d6e16338657b82c91ac94bea8ebf7b80dc4c28 Mike Slinn 2018-10-13 18:28:41 -0700 'nother comment' d5eb26e d5eb26e49fc9dceee9b9f5a2d8fa052bff2cfbbc Mike Slinn 2018-10-13 18:16:20 -0700 'no comment' d8a4992 d8a4992df208ba5efb50728311820bdad5ba5332 Mike Slinn 2018-10-13 12:02:00 -0700 'commented'

Date to search for commits:
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.