it-swarm.com.de

Wie kann ich die Anzahl der Zeilen berechnen, die zwischen zwei Commits in git geändert wurden?

Gibt es eine einfache Möglichkeit, die Anzahl der Zeilen zu berechnen, die zwischen zwei Commits in git geändert wurden? Ich weiß, ich kann einen git diff machen und die Zeilen zählen, aber das scheint langweilig zu sein. Ich würde auch gerne wissen, wie ich das tun kann, indem ich nur meine eigenen Commits in die Zeilenanzahl einbeziehe.

583
Mike

Sie möchten die --stat-Option von git diff oder, wenn Sie dies in einem Skript analysieren möchten, die --numstat-Option.

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

--stat erzeugt die vom Benutzer lesbare Ausgabe, die Sie nach Zusammenführungen gewohnt sind. --numstat erzeugt ein Nice-Tabellenlayout, das Skripts leicht interpretieren können.

Ich habe irgendwie vermisst, dass Sie dies bei mehreren Commits gleichzeitig tun wollten - das ist eine Aufgabe für git log. Ron DeVera berührt dies, aber Sie können tatsächlich viel mehr als das, was er erwähnt. Da git log intern die diff-Maschinerie aufruft, um die angeforderten Informationen auszudrucken, können Sie ihr eine beliebige Statistik-Option geben - nicht nur --shortstat. Was Sie wahrscheinlich verwenden möchten, ist:

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

sie können jedoch auch --numstat oder --shortstat verwenden. git log kann Commits auch auf verschiedene Weise auswählen - schauen Sie sich die Dokumentation an . Sie könnten an Dingen wie --since interessiert sein (anstatt Commit-Bereiche anzugeben, wählen Sie nur Commits seit letzter Woche aus) und --no-merges (Merge-Commits führen keine Änderungen ein) sowie die hübschen Ausgabeoptionen (--pretty=oneline, short, medium, full...).

Hier ist ein Einzeiler, um die gesamten Änderungen anstelle der Änderungen pro Commit aus dem Git-Protokoll abzurufen (ändern Sie die Commit-Auswahloptionen wie gewünscht - dies wird von Commit zu Commit1 in 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)}'

(Sie müssen git log einige identifizierende Informationen zum Commit ausgeben lassen; ich habe den Hash willkürlich ausgewählt und dann mit awk nur die Zeilen mit drei Feldern ausgewählt, die die stat-Informationen enthalten.)

891
Cascabel

Für die Faulenzer verwenden Sie git log --stat.

155
Thomas
git diff --shortstat

gibt Ihnen nur die Anzahl der geänderten und hinzugefügten Zeilen.

100
orkoden
git diff --stat commit1 commit2

BEARBEITEN: Sie müssen auch die Commits angeben (ohne Parameter wird das Arbeitsverzeichnis mit dem Index verglichen). Z.B.

git diff --stat HEAD^ HEAD

um das übergeordnete Element von HEAD mit HEAD zu vergleichen.

38

Angenommen, Sie möchten alle Commits zwischen abcd123 (dem ersten Commit) und wxyz789 (dem letzten Commit) vergleichen, einschließlich:

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(-)
15
Ron DeVera

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

git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10"

Ausgabe:

2637cc736 Revert changed code
 1 file changed, 5 insertions(+), 5 deletions(-)
ba8d29402 Fix review
 2 files changed, 4 insertions(+), 11 deletions(-)

Mit einem langen Ausgabeinhalt können Sie in eine Datei exportieren, um sie lesbarer zu machen

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

git log --numstat gibt nur die Zahlen an

1
nibinbhaskar

Obwohl alle obigen Antworten korrekt sind, ist die Verwendung der Antwort unten nützlich, wenn Sie die letzten vielen Commits zählen müssen

unter eins wird die Anzahl der letzten 5 Commits angezeigt

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

um die letzten 10 Commits zu zählen

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

generic - Ändere N mit der Anzahl der letzten Commits, die du brauchst

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

zählung aller Commits seit dem Start

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

1
user7154703