답변:
--stat
옵션을 원 git diff
하거나 스크립트에서 구문 분석 하려는 경우 옵션입니다 --numstat
.
git diff --stat <commit-ish> <commit-ish>
--stat
병합 후 보는 데 익숙한 사람이 읽을 수있는 출력을 생성합니다. --numstat
스크립트가 쉽게 해석 할 수있는 멋진 테이블 레이아웃을 생성합니다.
어떻게 든 여러 커밋에서 동시에이 작업을 수행하려고한다고 생각했습니다 git log
. Ron DeVera가 이에 대해 설명하지만 실제로 언급 한 것보다 더 많은 작업을 수행 할 수 있습니다. git log
요청 된 정보를 인쇄하기 위해 내부적으로 diff 기계를 호출 하므로 , diff 통계 옵션 중 하나만 제공 할 수 있습니다 --shortstat
. 당신이 사용하고 싶은 것은 :
git log --author="Your name" --stat <commit1>..<commit2>
하지만 당신은 사용할 수 있습니다 --numstat
또는 --shortstat
뿐만 아니라. git log
또한 다양한 다른 방법으로 커밋을 선택할 수 있습니다 . 문서를 살펴보십시오 . 당신은 같은 일에 관심이있을 수 있습니다 --since
(오히려 범위를 커밋 지정하는 대신, 지난 주 이후 커밋 선택) 및 --no-merges
(병합 커밋이 실제로 변화를 도입하지 않음)뿐만 아니라 예쁜 출력 옵션 ( --pretty=oneline, short, medium, full...
).
다음은 git log에서 커밋 당 변경 사항 대신 전체 변경 사항을 얻는 한 줄짜리 줄입니다 (커밋 선택 옵션을 원하는대로 변경하십시오-커밋 1에서 커밋 2로 커밋합니다).
git log --numstat --pretty="%H" --author="Your Name" commit1..commit2 | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}'
(git 커밋에 커밋에 대한 식별 정보를 인쇄하도록해야합니다. 나는 임의로 해시를 선택한 다음 awk를 사용하여 통계 정보가있는 필드 3 개가있는 행만 선택했습니다)
git diff --shortstat <commit1> <commit2>
내가 원했던 것입니다.
--since
과 --until
: 같은 것입니다 yesterday
, 1 month 2 weeks 3 days 1 hour 1 second ago
또는1979-02-26 18:30:00
<commit-ish>
을 나타내는 모든 항목에서 작동합니다 . 또한 참조 stackoverflow.com/questions/23303549/...
게으른 경우을 사용하십시오 git log --stat
.
-10
이전 10 개의 커밋을 보여주기 위해를 추가했다 .
Q
하면 터미널로 돌아 가기 위해 입력 하십시오.
git diff --shortstat
변경 및 추가 된 행 수만 제공합니다. 이것은 비 단계적 변경에서만 작동합니다. 브랜치와 비교하려면 :
git diff --shortstat some-branch
git add
을 수행하십시오.git diff --shortstat --cached
git diff --stat commit1 commit2
편집 : 커밋도 지정해야합니다 (매개 변수없이 작업 디렉토리와 색인을 비교합니다). 예 :
git diff --stat HEAD^ HEAD
HEAD
와 부모를 비교합니다 HEAD
.
diff-index
. diff
프론트 엔드가 모든 것을 처리 할 수 있습니다. 의 경우는 diff-index
에 의해 보호됩니다 --cached/--staged
. (그리고 diff-index
OP가 요청한대로 두 개의 임의 커밋을 비교 하는 방법은 없습니다 .)
git diff --stat HEAD
HEAD~n
어디에, n
다시 가고 싶은 얼마나 멀리이다. git diff --stat HEAD~5 HEAD
HEAD와 관련된 마지막 5 개의 커밋에 대한 합계 통계가 표시됩니다.
abcd123 (첫 번째 커밋)과 wxyz789 (마지막 커밋) 사이의 커밋을 모두 비교한다고 가정합니다.
git log wxyz789^..abcd123 --oneline --shortstat --author="Mike Surname"
이것은 다음과 같은 간결한 출력을 제공합니다.
abcd123 Made things better
3 files changed, 14 insertions(+), 159 deletions(-)
wxyz789 Made things more betterer
26 files changed, 53 insertions(+), 58 deletions(-)
--shortstat
플래그는 함께 작동, 굉장 git diff
하지만 (하지 git log
).
지정된 기간 동안 모든 변경 로그를 얻는 다른 방법
git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10"
산출:
2637cc736 Revert changed code
1 file changed, 5 insertions(+), 5 deletions(-)
ba8d29402 Fix review
2 files changed, 4 insertions(+), 11 deletions(-)
출력 내용이 길면 파일로 내 보내서 읽을 수 있습니다.
git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10" > /mnt/MyChangeLog.txt
위의 모든 대답은 정확하지만 마지막 아래의 커밋 횟수가 필요한 경우 아래 중 하나를 사용하면 편리합니다.
아래는 마지막 5 개의 커밋을 얻는 것입니다.
git diff $(git log -5 --pretty=format:"%h" | tail -1) --shortstat
최근 10 개의 커밋 수
git diff $(git log -10 --pretty=format:"%h" | tail -1) --shortstat
generic-필요한 많은 커밋 수로 N을 변경하십시오.
git diff $(git log -N --pretty=format:"%h" | tail -1) --shortstat
시작 이후 모든 커밋 수를 가져옵니다.
git diff $(git log --pretty=format:"%h" | tail -1) --shortstat
방금이 문제를 스스로 해결 했으므로 내가 생각해 낸 것을 공유 할 것입니다. 최종 결과는 다음과 같습니다.
> git summary --since=yesterday
total: 114 file changes, 13800 insertions(+) 638 deletions(-)
기본 명령은 다음과 같습니다.
git log --numstat --format="" "$@" | awk '{files += 1}{ins += $1}{del += $2} END{print "total: "files" files, "ins" insertions(+) "del" deletions(-)"}'
노트 $@
당신의 인수에 같은 전달 로그 명령을 --author="Brian"
또는 --since=yesterday
.
awk를 git alias에 넣는 것을 어지럽히는 대신 지저분해서 대신 내 경로 ( ~/bin/git-stat-sum
) 의 실행 가능한 스크립트에 넣은 다음 my의 별칭에 스크립트를 사용했습니다 .gitconfig
.
[alias]
summary = !git-stat-sum \"$@\"
그리고 그것은 정말 잘 작동합니다. 마지막으로 주목해야 할 것은 file changes
변경된 고유 파일의 수가 아니라 파일의 변경 횟수입니다. 그것이 내가 찾던 것이지만, 당신이 기대하는 것이 아닐 수도 있습니다.
여기 또 다른 예가 있습니다
git summary --author=brian
git summary master..dev
# combine them as you like
git summary --author=brian master..dev
git summary --all
실제로 모든 git log
명령을 로 바꿀 수 있어야합니다 git summary
.