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.
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.)
Für die Faulenzer verwenden Sie git log --stat
.
git diff --shortstat
gibt Ihnen nur die Anzahl der geänderten und hinzugefügten Zeilen.
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.
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(-)
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
git log --numstat gibt nur die Zahlen an
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