source

Git에서 두 커밋 간에 변경된 줄 수를 계산하려면 어떻게 해야 합니까?

ittop 2023. 5. 12. 22:43
반응형

Git에서 두 커밋 간에 변경된 줄 수를 계산하려면 어떻게 해야 합니까?

Git에서 두 커밋 간에 변경된 줄 수를 쉽게 계산할 수 있는 방법이 있습니까?

나는 할 수 있다는 것을 압니다.git diff대사를 세어봐요, 하지만 이건 지루해 보여요.또한 줄 수에 자신의 커밋만 포함하여 어떻게 해야 하는지 알고 싶습니다.

당신은 그것을 원합니다.--stat.git diff 분석하려고또스크트이구문분경는우려석하것을서는립에▁or경.--numstat선택.

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

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

나는 당신이 동시에 여러 커밋에서 이것을 하려고 한다는 것을 어쩐지 놓쳤습니다. - 그것은 다음을 위한 작업입니다.git log론 드베라는 이것에 대해 언급했지만, 실제로 그가 언급한 것보다 훨씬 더 많은 것을 할 수 있습니다. 때부터git log정보를 할 수 . - diffmachine만 지정하는 것이 diffstat 옵션을 지정할 수 있습니다.--shortstat사용하고자 하는 항목은 다음과 같습니다.

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

하지만 당신은 사용할 수 있습니다.--numstat또는--shortstat뿐만 아니라. git log또한 다양한 방법으로 커밋을 선택할 수 있습니다. 설명서를 참조하십시오.당신은 아마도 다음과 같은 것들에 관심이 있을 것입니다.--since범위를 하십시오.) 및 (커밋 범위를 지정합니다.)--no-merges변경을 옵션으)ㄹ 수 있습니다.), ㄹ 수 있습니다.--pretty=oneline, short, medium, full...).

다음은 gitlog에서 커밋별 변경 대신 총 변경사항을 가져오는 한 줄기 방법입니다(커밋 선택 옵션을 원하는 대로 변경합니다. 이는 사용자가 커밋한 것입니다. 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)}'

(기트 로그가 커밋에 대한 식별 정보를 인쇄하도록 해야 합니다. 저는 임의로 해시를 선택한 다음 awk를 사용하여 통계 정보가 있는 세 개의 필드가 있는 줄만 선택했습니다.)

git diff --shortstat

변경 및 추가된 줄 수만 제공합니다.이것은 단계적으로 변경되지 않은 경우에만 작동합니다.분기와 비교하기

git diff --shortstat some-branch

게으른 사람들을 위해, 사용합니다.git log --stat.

git diff --stat commit1 commit2

편집: 커밋도 지정해야 합니다(파라미터 없이 작업 디렉터리와 인덱스를 비교합니다).예.

git diff --stat HEAD^ HEAD

의부를비보다의 HEAD와 함께HEAD.

마지막 커밋에 대한 짧은 통계:

git diff --shortstat HEAD~1 HEAD

이 경우 다음과 같은 정보를 얻을 수 있습니다.

 254 files changed, 37 insertions(+), 10773 deletions(-)

삽입 및 삭제는 영향을 받는 행입니다.

제가 방금 이 문제를 제 스스로 해결했으니 제가 생각해낸 것을 공유하겠습니다.다음은 최종 결과입니다.

> 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.

git alias에 넣기 위해 awk를 탈출하는 것은 지저분했고, 그래서 대신 내가 가는 길에 실행 가능한 스크립트에 넣었습니다 (~/bin/git-stat-sum), 그런 다음 내 별명에 있는 스크립트를 사용했습니다..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.

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 diff --shortstat <first commit number of the year> HEAD

결과 가져오기 270개 파일 변경, 19175개 삽입((+), 1979개 삭제((-)

git log --numstat 

그냥 숫자만 알려줍니다.

지점과 다른 지점 간에 변경된 라인 수를 포함하여 변경 사항을 보려면,

git diff the_other_branch_name --stat

위의 답변이 모두 정답이지만, 마지막 커밋 수가 필요한 경우 아래의 답변을 사용하면 편리합니다.

아래는 최근 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

다른 사람이 같은 것을 필요로 할 경우를 대비하여 삽입과 삭제를 합계에 넣고 싶었습니다.

# get the log      filter useless parts      calculate the sum    and print it
git log --numstat | grep -vE '^[^0-9]' | awk '{sum += $1 + $2} END {print sum}'

이는 다른 솔루션(예: 정의되지 않은 게시된 솔루션)보다 다양하지는 않지만, 사용 사례에 적합한 숫자만 제공합니다.

git diff --stat수정된 행을 두 번 카운트합니다.문제가 있는 경우 대신 다음 작업을 수행할 수 있습니다.

git diff | diffstat -Cm

이렇게 하면 추가된 + 삭제된 라인과 수정된 라인을 구분하는 [시도]한다는 점을 제외하고 동일한 출력이 제공됩니다.

이 명령은 로컬 파일을 원격 파일과 비교합니다.

git diff --stat

분기 또는 커밋 사이의 삽입, 삭제 및 커밋 수를 확인하려는 경우.

커밋 ID 사용:

git log <commit-id>..<commit-id> --numstat --pretty="%H" --author="<author-name>" | awk 'NF==3 {added+=$1; deleted+=$2} NF==1 {commit++} END {printf("total lines added: +%d\ntotal lines deleted: -%d\ntotal commits: %d\n", added, deleted, commit)}'

분기 사용:

git log <parent-branch>..<child-branch> --numstat --pretty="%H" --author="<author-name>" | awk 'NF==3 {added+=$1; deleted+=$2} NF==1 {commit++} END {printf("total lines added: +%d\ntotal lines deleted: -%d\ntotal commits: %d\n", added, deleted, commit)}'

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

반응형