Development Tip

git에서 두 커밋 사이에 변경된 줄 수를 어떻게 계산할 수 있습니까?

yourdevel 2020. 9. 30. 11:35
반응형

git에서 두 커밋 사이에 변경된 줄 수를 어떻게 계산할 수 있습니까?


git에서 두 커밋 사이에 변경된 줄 수를 계산하는 쉬운 방법이 있습니까? 나는 내가 할 git diff수 있고 줄을 세는 것을 알고 있지만 이것은 지루한 것처럼 보입니다. 또한 줄 수에 내 자신의 커밋 만 포함하여 어떻게 할 수 있는지 알고 싶습니다.


--stat옵션을 git diff하거나 스크립트에서 이것을 구문 분석 하려는 경우 옵션을 원합니다 --numstat.

git diff --stat <commit-ish> <commit-ish>

--stat병합 후 보던 사람이 읽을 수있는 출력을 생성합니다. --numstat스크립트가 쉽게 해석 할 수있는 멋진 테이블 레이아웃을 생성합니다.

나는 당신이 동시에 여러 커밋에 대해 이것을 찾고 있다는 것을 어떻게 든 놓쳤습니다 git log. Ron DeVera는 이에 대해 언급하지만 실제로 그가 언급 한 것보다 훨씬 더 많은 일을 할 수 있습니다. git log요청 된 정보를 인쇄하기 위해 내부적으로 diff 기계를 호출하기 때문에 diff stat 옵션뿐만 아니라 모든 diff stat 옵션을 제공 할 수 있습니다 --shortstat. 사용하고 싶은 것은 다음과 같습니다.

git log --author="Your name" --stat <commit1>..<commit2>

하지만 --numstat또는 사용할 수 있습니다 --shortstat. git log다른 다양한 방법으로 커밋을 선택할 수도 있습니다 . 설명서를 참조하십시오 . 당신은 같은 일에 관심이있을 수 있습니다 --since(오히려 범위를 커밋 지정하는 대신, 지난 주 이후 커밋 선택) 및 --no-merges(병합 커밋이 실제로 변화를 도입하지 않음)뿐만 아니라 예쁜 출력 옵션 ( --pretty=oneline, short, medium, full...).

다음은 git 로그에서 커밋 별 변경 사항 대신 전체 변경 사항을 가져 오는 한 줄입니다 (원하는대로 커밋 선택 옵션을 변경합니다. 이것은 commit1에서 commit2로 커밋합니다).

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 log가 커밋에 대한 식별 정보를 출력하도록해야합니다. 나는 임의로 해시를 선택한 다음 awk를 사용하여 통계 정보가있는 세 개의 필드가있는 행만 선택했습니다)


게으른 경우 git log --stat.


git diff --shortstat

변경 및 추가 된 행 수만 제공합니다. 이것은 비 단계적 변경에만 적용됩니다. 브랜치와 비교하려면 :

git diff --shortstat some-branch

git diff --stat commit1 commit2

편집 : 커밋도 지정해야합니다 (매개 변수없이 작업 디렉터리와 인덱스를 비교합니다).

git diff --stat HEAD^ HEAD

의 부모 HEADHEAD.


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(-)

지정된 기간 동안 모든 변경 로그를 가져 오는 또 다른 방법

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

git log --numstat는 숫자 만 제공합니다.


위의 모든 답변이 정확하지만 마지막 많은 커밋 횟수가 필요한 경우 아래 답변을 사용하는 것이 편리합니다.

하나 아래는 마지막 5 개의 커밋 수를 얻는 것입니다.

git diff $(git log -5 --pretty=format:"%h" | tail -1) --shortstat

마지막 10 개의 커밋 수를 얻으려면

git diff $(git log -10 --pretty=format:"%h" | tail -1) --shortstat

일반-필요한 마지막 커밋 수로 N 변경

git diff $(git log -N --pretty=format:"%h" | tail -1) --shortstat

시작 이후 모든 커밋 수를 얻으려면

git diff $(git log --pretty=format:"%h" | tail -1) --shortstat

참고 URL : https://stackoverflow.com/questions/2528111/how-can-i-calculate-the-number-of-lines-changed-between-two-commits-in-git

반응형