어떻게 얻을 수 있습니 차 사이의 모든 투 사이에 발생한 두 날짜 Git?
문제
나 모든 투 사이에 발생한 두가요?에 SVN,당신이 할 수있는 뭔가
svn diff -r{date}:{date}
무료로 액세스 할 수 있습니다.나는 찾을 수 없는 것 자식에 해당하다.
특히 나를 보고하기 위한 스크립트를 작성하고 매일 보내는 이메일로 모든 코드는 최선을 다루는 누구에 의하여.
해결책
다른 팁
이전 제안에는 몇 가지 단점이 있습니다. 기본적으로, 나는 동등한 것을 찾고있었습니다 cvs diff -D"1 day ago" -D"2010-02-29 11:11"
. 점점 더 많은 정보를 수집하는 동안 솔루션을 찾았습니다.
내가 시도한 것들 :
git whatchanged --since="1 day ago" -p
~에서 여기그러나 이것은 하나의 파일에 여러 개의 커밋이 있더라도 각 커밋마다 차이를 제공합니다. 나는 그것을 알고있다 "날짜"는 git의 약간 느슨한 개념입니다., 나는 이것을 할 방법이 있어야한다고 생각했다.
git diff 'master@{1 day ago}..master
약간의 경고를합니다warning: Log for 'master' only goes back to Tue, 16 Mar 2010 14:17:32 +0100.
모든 차이를 보여주지는 않습니다.git format-patch --since=yesterday --stdout
나를 위해 아무것도주지 않습니다.revs=$(git log --pretty="format:%H" --since="1 day ago");git diff $(echo "$revs"|tail -n1) $(echo "$revs"|head -n1)
어떻게 든 작동하지만 복잡해 보이고 현재 지점으로 제한되지 않습니다.
드디어:
git diff $(git rev-list -n1 --before="1 day ago" master)
작동하는 것 같습니다 비슷한 일을하는 기본 방법, 내가 생각했던 것보다 더 복잡하지만.
재미있게도 Git -CVSServer는 "CVS Diff -D"를 지원하지 않습니다 (어딘가에 문서화되지 않으면).
"date"약간의 느슨한 개념에서 사용할 수 있습니다..커미가 있을 것이 저자 날짜할 수 있는 시간이 과거에 잘하기 전에 누군가가 실제로 끌어/commits commit 으로 자신의 저장소에도,커미할 수 있습베이스 및 업데이트로의 상단에 분명히 새로운다.
커밋한 commit 날짜를 업데이트되는 경우 커밋의 주소 또는 개정된 어떤 방법입니다.이러한 커밋가 될 가능성이에 일종의 연대순으로 하지만 당신은 여전히 자비의 커미터는 올바른 시간을 설정하에서 자신의 컴퓨터 그럼에도 불구하고,수정하지 않은 상태 commit 에 앉을 수 있는 기능을 지점에 원격 저장소의 무기한 전에 병합되는 마스터의 중앙 저장소에 있습니다.
아마도 가장 유용한 당신의 목적 reflog 날짜에서 특정장소에서 질문입니다.이 있는 경우 당점 reflogs 사용하십시오( git config core.logAllRefUpdates
음)사용할 수 있습니다 ref@{date}
구문을 참조하는 분이었습니다.
E.g.
git log -p master@{2009-07-01}..master@{now}
또한 사용할 수 있는'퍼지'설명:
git log -p "master@{1 month ago}..master@{yesterday}"
이러한 명령을 표시됩니다 모든 커밋 있는'등장에'주어진 지점의 저장소에 관계없이'이전'그들은 실제로 따르면 그 저자가 투입니다.
참고당 지점 reflog 은 특정을 저장소,그래서를 실행하는 경우에는 로그 명령에 복제,그리고 당신은 당기지 마십시오를 위해(예)한 달하기 위해 다른 모든 변경 사항에 대한 지난 달에 한 번,그의 마지막 달의 변화에 나타납니다 @{1 hour ago}..@{now}
범위에 있습니다.할 수 있는 경우 로그 실행하는 명령에'central'repostory 는 사람들이 밀어,다음 그것을 할 수 있습니다.
git diff --stat @{2013-11-01}..@{2013-11-30}
또는
git diff --stat @{2.weeks.ago}..@{last.week}
아마도
$ git format-patch --committer=<who> --since=yesterday --stdout
당신이 원하는 것 ( '-stdout'과 함께 또는없는 것)입니까?
일반적인 해결책은 사용하는 것입니다.
git rev-list -n1 --first-parent --until=<a date string> <a ref>
-사후 부모가 없으면 나중에 합병 된 지점에서 커밋을받을 수 있습니다. a ref
그러나 그대로 합병되지 않았습니다 a date string
.
다음은 대안을 사용하는 것입니다 --children
그리고 grep
대신에 -n1
:
mlm_git_ref_as_of() {
# # Examples #
#
# Show all commits between two dates:
#
# git log $(mlm_git_ref_as_of '2012-05-21 09:00:00-0400')..$(mlm_git_ref_as_of '2012-05-21 17:00:00-0400')
#
# Show diffs of all commits between two dates:
#
# git diff $(mlm_git_ref_as_of '2012-05-21 09:00:00-0400')..$(mlm_git_ref_as_of '2012-05-21 17:00:00-0400')
local as_of="$1"
local ref="${2:-HEAD}"
# Get the most recent commit (--children, grep -v ' ') that was on
# the given branch ($ref, --first-parent) as of a given date
# ($as_of)
git rev-list --children --first-parent --until="$as_of" "$ref" | grep -v ' '
}
나는 익숙하지 않았다 git whatchanged
이 Q & A를 읽기 전에는 매우 다른 결과를 제공하므로 그것이 무엇을하고 있는지 잘 모르겠습니다.
특정 날짜가 단순히 첫 번째 커밋을 찾는 것입니다. X
그 날짜 또는 그 이후에 발생한 다음 사용합니다.
git diff X
이것은 신선한 클론의 리플 로그 항목에 의존하지 않는다는 이점이 있습니다.
git diff <reference>@{n}..
git log <reference>@{n}..
솔루션
더 나은 방법이 있기 때문에 이것은 재미있는 대답입니다. 이것은 오늘날의 모든 커밋 해시를 보여줄 것입니다.
git log --pretty="format:%H %ai" | grep `date +"%Y-%m-%d"` | awk {'print $1'}`
;·)
당신은 또한 사용할 수 있습니다 git- 형식 패치 패치 (diffs)를 준비하고 이메일을 통해 보내십시오.
커밋 범위를 지정하려면 옵션 [이후] 또는 [개정 범위]를 사용하십시오.
내가하는 방식으로 던질 것입니다.git log
날짜는 현재 지점에 대한 커밋 해시를 제공합니다. 그런 다음 나는 단지 같은 것을 사용합니다 git diff 8fgdfg8..565k4l5
파일로 집계 된 적절한 차이를 제공합니다. 그래도 테스트하지 않은 도움이되기를 바랍니다
파일이 지점에서 날짜로 변경되는 것을 보려면다음 공식을 사용하십시오:
- 지점을 확인하십시오.
- 원격 저장소에서 변경 및 업데이트
- Diff 파일을 날짜부터 날짜까지 시청하십시오
예시:
git checkout <branch>
git pull
git diff --stat @{fromDate}..@a{toDate}
날짜에주의를 기울이십시오 yyyy-mm-dd 체재:
git diff --stat @{2019-08-20}..@a{2019-08-21}
관찰하고 싶다면 특정 시간 범위에서 특정 파일의 변경 (코드에서 Diff를보십시오), 현재 파일을 탐색하기 만하면됩니다.
예시:
git diff @{2019-01-01}..@{2019-01-02} ~/dev/myApp/package.json