Ein Riff auf Git: Alle geänderten Dateien zwischen zwei Commits anzeigen: Ich möchte eine Auflistung aller Dateien, die zwischen zwei Commits geändert wurden, auch wenn sie jetzt gleich sind (dh geändert und dann zurück geändert).
git: Zeigt alle Dateien an, die zwischen zwei Commits geändert wurden
Andreas
igorw
Das ist das Beste was mir eingefallen ist:
git log --name-only --pretty=oneline --full-index HEAD^^..HEAD | grep -vE '^[0-9a-f]{40} ' | sort | uniq
Ersetzen Sie HEAD^^ und HEAD durch die Commits, die Sie vergleichen möchten.
Mein Versuch nutzt git log
mit --name-only
um alle Dateien jedes Commits zwischen den angegebenen aufzulisten. --pretty=oneline
bewirkt, dass der Teil über der Dateiliste nur aus dem Commit-SHA und dem Nachrichtentitel besteht. --full-index
macht den SHA zu den vollen 40 Zeichen. grep
filtert alles heraus, was wie ein SHA gefolgt von einem Leerzeichen aussieht. Sofern Sie keine Dateien haben, die mit einem SHA gefolgt von einem Leerzeichen beginnen, sollte das Ergebnis korrekt sein.
-
Wenn ich diesen Befehl für HEAD^ und HEAD ausführe, erhalte ich eine Liste, die aussieht wie jede einzelne Datei im Repository; auch die, die sich nicht geändert haben.
– Blair Holloway
30. Juni 10 um 6:34 Uhr
-
Mein Fehler, das Format ist “
.. ” anstelle von “ “. – igorw
30. Juni 10 um 13:54 Uhr
-
Danke, etwas umständlich, aber es geht.
– Andreas
1. Juli 10 um 17:39 Uhr
-
Auf jeden Fall umständlich. Ich musste 3 Punkte zwischen die Commit-SHAs setzen (nicht 2 wie gezeigt), damit es funktioniert. Ich denke, Bryces Antwort ist einfacher (dh die Verwendung von –stat für den Befehl git diff) und bietet etwas mehr Informationen (Zusammenfassung der Anzahl der geänderten Dateien plus Anzahl der in jeder Datei geänderten Zeilen).
– Daniel Goldfarb
27. Juli 15 um 20:53 Uhr
brycemcd
Ich denke, dieser Befehl ist Ihre Antwort:
git diff --stat abc123 xyz123 # where abc123 and xyz123 are SHA1 hashes of commit objects
Direkt von der Git-Community-Buch:
Wenn Sie nicht den ganzen Patch sehen möchten, können Sie die Option „–stat“ hinzufügen, die die Ausgabe auf die Dateien beschränkt, die sich geändert haben, zusammen mit einem kleinen Textdiagramm, das darstellt, wie viele Zeilen in jeder Datei geändert wurden.
-
Genauer,
git diff --stat <commit1> <commit2>
.– Blair Holloway
30. Juni 10 um 6:35 Uhr
-
Nein, genau das wollte er nicht. Git diff führt einen direkten Unterschied zwischen den Bäumen durch, es berücksichtigt nicht die Commits. Wenn Sie eine neue Datei mit Inhalt “A” erstellen, ändern Sie den Inhalt in “B” und ändern Sie ihn dann wieder in “A”.
git diff --stat HEAD^^ HEAD
gibt Ihnen eine leere Ausgabe.– igorw
30. Juni 10 um 13:57 Uhr
-
git diff --name-only
ist wahrscheinlich besser alsgit diff --stat
aber wie gesagtgit diff
tut nicht das, was der OP wollte.– Nutter
17. November 14 um 16:13 Uhr
Lloyd Rochester
Wenn Sie nur die Dateinamen sehen möchten, wo commit b
ist chronologisch nach a
:
git diff <a commit sha1>...<b commit sha2> --name-only # b is after a in time
Wenn Sie alle Dateinamen sehen möchten und was von Commit a zu Commit b geändert wurde, lassen Sie das letzte Argument weg.
git diff <a commit sha1>...<b commit sha2> # shows file names and what changed in each file
Ein Beispiel für <commit sha1>
sind die Commit-IDs wie 675ee6860d2c273bcc6c6a0536634a107e2a3d9f
. Im Allgemeinen funktionieren die ersten 8-10 Ziffern bei den meisten Projekten, benötigen aber möglicherweise mehr, wenn das Projekt Unmengen von Commits hat. Normalerweise verwende ich die Ausgabe der ID von git log --oneline
.
Wenn Sie einen Unterschied von a … b erhalten und b zeitlich später als a ist, ist es einfach zu sehen, was in jeder Datei chronologisch geändert wurde.
-
Dies ist der Weg, es zu tun!
– Ethan Groat
13. August 21 um 21:45 Uhr
Craig Rickett
Ich würde verwenden; nimmt die ersten 8 des Commit-Hashes. Wenn Sie wollten, könnten Sie wie folgt in eine Datei leiten:
git log 12345678..87654321 > C:GitChanges.txt
-
Ich habe diesen Befehl gerade getestet. Die Verarbeitung dauerte etwa 10 Sekunden und begann dann, eine riesige Dateiliste auszuspucken.
– ostler.c
31. Oktober 12 um 19:43 Uhr
-
@ostler.c: Hast du den Revisionsbereich eingegeben
"$@"
? Andernfalls werden vorhandene Änderungen angezeigt, was sehr viel ist 🙂 Ich habe meine Antwort überarbeitet, um ein Beispiel zu verwenden, wie in den anderen Antworten.– Ingo Karkat
31. Oktober 12 um 20:14 Uhr
-
Okay das macht Sinn. Ich bin überrascht, dass ich “$@” nicht kannte. Obwohl ich es für die meisten Befehle nicht als sehr nützlich empfinde.
– ostler.c
31. Oktober 12 um 22:04 Uhr
-
@ostler.c: Ich habe diese Zeile in a
git-showfiles
Skript und die"$@"
fügt alle übergebenen Argumente ein; Obwohl es ein wenig obskur ist (wie vieles beim Shell-Scripting), ist dies ziemlich Standard-Zeug.– Ingo Karkat
1. November 12 um 9:11 Uhr
Ich verwende diesen Befehl, um alle Änderungen zwischen zwei Commits zu vergleichen:
git difftool -d <commit hash1> <commit hash2>
Wie ein Git-Rebase, um alle lokalen Commits in einem zusammenzufassen.
.