1125 Stimmen

Wie kann ich die Anzahl der geänderten Zeilen zwischen zwei Commits in Git berechnen?

Gibt es eine einfache Möglichkeit, die Anzahl der geänderten Zeilen zwischen zwei Commits in Git zu berechnen?

Ich weiß, ich kann eine git diff und die Zeilen zu zählen, aber das scheint mühsam zu sein. Ich würde auch gerne wissen, wie ich das machen kann, indem ich nur meine eigenen Commits in die Zeilenzählung einbeziehe.

27voto

undefined Punkte 5820

Ich habe dieses Problem gerade für mich selbst gelöst und werde Ihnen mitteilen, was ich dabei herausgefunden habe. Hier ist das Endergebnis:

> git summary --since=yesterday
total: 114 file changes, 13800 insertions(+) 638 deletions(-)

Der zugrunde liegende Befehl sieht wie folgt aus:

git log --numstat --format="" "$@" | awk '{files += 1}{ins += $1}{del += $2} END{print "total: "files" files, "ins" insertions(+) "del" deletions(-)"}'

Beachten Sie die $@ im Log-Befehl, um Ihre Argumente weiterzugeben, wie zum Beispiel --author="Brian" o --since=yesterday .

Das awk zu umgehen, um es in einen Git-Alias zu packen, war chaotisch, also habe ich es stattdessen in ein ausführbares Skript in meinem Pfad ( ~/bin/git-stat-sum ), dann verwendete ich das Skript in dem Alias in meinem .gitconfig :

[alias]
    summary = !git-stat-sum \"$@\"

Und es funktioniert wirklich gut. Eine letzte Sache, die zu beachten ist, ist, dass file changes ist die Anzahl der Änderungen an Dateien, nicht die Anzahl der einzelnen geänderten Dateien. Das ist es, wonach ich gesucht habe, aber es ist vielleicht nicht das, was Sie erwarten.

Hier ein oder zwei weitere Beispiele

git summary --author=brian
git summary master..dev
# combine them as you like
git summary --author=brian master..dev
git summary --all

Sie sollten wirklich in der Lage sein, jede git log Befehl mit git summary .

2 Stimmen

Es sollte die akzeptierte Antwort sein, da es die einzige ist, die die Frage tatsächlich beantwortet: eine Summe bilden, um die gesamten geänderten Zeilen anzuzeigen. Andere Antworten zeigen die Summe für jede Zeile oder jeden Commit an, fassen sie aber nicht zusammen. Sie sollten es einfach verbessern, indem Sie "$@" durch "<commit1>..<commit2>" ersetzen.

2 Stimmen

Hier ist der Befehl, der für die Verwendung in einem Git-Alias entfällt summary = "!git log --numstat --format=\"\" \"$@\" | awk '{files += 1}{ins += $1}{del += $2} END{print \"total: \"files\" files, \"ins\" insertions(+) \"del\" deletions(-)\"}' #"

2 Stimmen

Wenn Sie das Skript git-summary und es in Ihrem Weg liegt, können Sie nennen es als git summary ohne den Alias .

21voto

nassy Punkte 91

Ein gutes Resümee für das Jahr

git diff --shortstat <first commit number of the year> HEAD

Ergebnisse 270 geänderte Dateien, 19175 Einfügungen(+), 1979 Löschungen(-)

20voto

Ron DeVera Punkte 13986

Angenommen, Sie wollen alle Ihre Commits zwischen abcd123 (dem ersten Commit) und wxyz789 (dem letzten Commit) vergleichen, inklusive:

git log wxyz789^..abcd123 --oneline --shortstat --author="Mike Surname"

Dies ergibt eine prägnante Ausgabe wie:

abcd123 Made things better
 3 files changed, 14 insertions(+), 159 deletions(-)
wxyz789 Made things more betterer
 26 files changed, 53 insertions(+), 58 deletions(-)

1 Stimmen

Die Ausgabe davon ist nichts für mich (ich habe Übertragungen gemacht und überprüft, dass --author korrekt ist, indem ich es mit git log und ohne andere Argumente verwendet habe).

0 Stimmen

Das ist mir auch passiert. Die beiden Übertragungen waren in der falschen Reihenfolge, vertauschen sie um es behoben.

1 Stimmen

Die Reihenfolge der Übertragungen wurde aktualisiert und klargestellt, was die beiden SHAs darstellen. Danke, dass Sie es bemerkt haben :)

19voto

nmtri Punkte 414

Eine andere Möglichkeit, alle Änderungsprotokolle innerhalb eines bestimmten Zeitraums zu erhalten

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

Bei einem langen Ausgabeinhalt können Sie zur besseren Lesbarkeit in eine Datei exportieren

git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10" > /mnt/MyChangeLog.txt

11voto

nibinbhaskar Punkte 127
git log --numstat 

gibt Ihnen nur die Zahlen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X