Gibt es eine einfache Möglichkeit, die Anzahl der Zeilen zu berechnen, die zwischen zwei Commits in Git geändert wurden?
Ich weiß, dass ich a machen git diff
und die Zeilen zählen kann, aber das scheint langweilig. Ich würde auch gerne wissen, wie ich das machen kann, einschließlich nur meiner eigenen Commits in den Linecounts.
Antworten:
Sie möchten die
--stat
Optiongit diff
oder, wenn Sie dies in einem Skript analysieren möchten , die--numstat
Option.--stat
Erzeugt die für Menschen lesbare Ausgabe, die Sie nach dem Zusammenführen gewohnt sind.--numstat
erzeugt ein schönes Tabellenlayout, das Skripte leicht interpretieren können.Ich habe irgendwie übersehen, dass Sie dies bei mehreren Commits gleichzeitig tun wollten - das ist eine Aufgabe für
git log
. Ron DeVera geht darauf ein, aber Sie können tatsächlich viel mehr tun, als er erwähnt. Dagit log
die Diff-Maschinerie intern aufgerufen wird, um die angeforderten Informationen zu drucken, können Sie ihr eine der Diff-Stat-Optionen geben - nicht nur--shortstat
. Was Sie wahrscheinlich verwenden möchten, ist:aber du kannst
--numstat
oder--shortstat
auch verwenden.git log
Sie können Commits auch auf verschiedene andere Arten auswählen - sehen Sie sich die Dokumentation an . Möglicherweise interessieren Sie sich für Dinge wie--since
(anstatt Festschreibungsbereiche anzugeben, wählen Sie einfach Festschreibungen seit letzter Woche aus) und--no-merges
(Festschreibungsübertragungen führen keine Änderungen ein) sowie für die hübschen Ausgabeoptionen (--pretty=oneline, short, medium, full...
).Hier ist ein Einzeiler, um Gesamtänderungen anstelle von Änderungen pro Festschreibung aus dem Git-Protokoll zu erhalten (ändern Sie die Auswahloptionen für die Festschreibung wie gewünscht - dies wird von Ihnen festgeschrieben, von Festschreibung1 zu Festschreibung2):
(Sie müssen das Git-Protokoll einige identifizierende Informationen über das Commit drucken 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.)
quelle
git diff --shortstat <commit1> <commit2>
war derjenige, den ich wollte.--since
und--until
ist so etwas wie:yesterday
,1 month 2 weeks 3 days 1 hour 1 second ago
, oder1979-02-26 18:30:00
<commit-ish>
es in dieser Zeile: Sie funktioniert mit allem, was ein Commit darstellt, einschließlich wörtlicher Commits, Zweige, Tags und Refs im Allgemeinen. Siehe auch stackoverflow.com/questions/23303549/…Für die Faulen verwenden
git log --stat
.quelle
-10
, um die vorherigen zehn Commits anzuzeigen.Q
um zum Terminal zurückzukehren.gibt Ihnen nur die Anzahl der Zeilen, die geändert und hinzugefügt wurden. Dies funktioniert nur bei nicht bereitgestellten Änderungen. So vergleichen Sie mit einem Zweig:
quelle
git add
, stellen Sie sicher, dass Sie dies tungit diff --shortstat --cached
BEARBEITEN: Sie müssen auch die Commits angeben (ohne Parameter wird das Arbeitsverzeichnis mit dem Index verglichen). Z.B
um die Eltern von
HEAD
mit zu vergleichenHEAD
.quelle
diff-index
- dasdiff
Frontend kann alles handhaben; Ich glaube, der Fall vondiff-index
wird von der abgedeckt--cached/--staged
. (Und es gibt keine Möglichkeit,diff-index
zwei willkürliche Commits zu vergleichen, wie vom OP verlangt.)git diff --stat HEAD
HEAD~n
, indemn
Sie angeben, wie weit Sie zurückgehen möchten.git diff --stat HEAD~5 HEAD
zeigt kombinierte Statistiken für die letzten 5 Commits in Bezug auf HEAD an.Angenommen, Sie möchten alle Ihre Commits zwischen abcd123 (dem ersten Commit) und wxyz789 (dem letzten Commit) vergleichen, einschließlich:
Dies ergibt eine prägnante Ausgabe wie:
quelle
--shortstat
Flagge ist fantastisch, sie funktioniertgit diff
jedoch (nichtgit log
).Eine andere Möglichkeit, alle Änderungsprotokolle in einem bestimmten Zeitraum abzurufen
Ausgabe:
Mit einem langen Ausgabeinhalt können Sie zur besseren Lesbarkeit in eine Datei exportieren
quelle
Obwohl alle oben genannten Antworten korrekt sind, ist die folgende nützlich, wenn Sie die Anzahl der letzten Commits benötigen
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
generisch - Ändern Sie N mit der Anzahl der letzten Commits, die Sie benötigen
git diff $(git log -N --pretty=format:"%h" | tail -1) --shortstat
um alle Commits seit dem Start zu zählen
git diff $(git log --pretty=format:"%h" | tail -1) --shortstat
quelle
git log --numstat gibt Ihnen nur die Zahlen
quelle
Ich habe dieses Problem nur für mich selbst gelöst, also werde ich mitteilen, was ich mir ausgedacht habe. Hier ist das Endergebnis:
Der zugrunde liegende Befehl sieht folgendermaßen aus:
Beachten Sie den
$@
Befehl im Protokoll, um Ihre Argumente wie--author="Brian"
oder weiterzugeben--since=yesterday
.Es war chaotisch, dem awk zu entkommen, um es in einen Git-Alias zu setzen. Stattdessen habe ich es in ein ausführbares Skript auf meinem Pfad (
~/bin/git-stat-sum
) eingefügt und dann das Skript im Alias in meinem.gitconfig
:Und es funktioniert wirklich gut. Eine letzte Sache, die zu beachten ist,
file changes
ist die Anzahl der Änderungen an Dateien, nicht die Anzahl der eindeutigen Dateien, die geändert wurden. Das habe ich gesucht, aber es ist möglicherweise nicht das, was Sie erwarten.Hier ist ein weiteres Beispiel oder zwei
Wirklich, Sie sollten in der Lage sein, jeden
git log
Befehl durch zu ersetzengit summary
.quelle