git: Zeigt alle Dateien an, die zwischen zwei Commits geändert wurden

Lesezeit: 4 Minuten

git Zeigt alle Dateien an die zwischen zwei Commits geandert
Andreas

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 geandert
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

1643044087 931 git Zeigt alle Dateien an die zwischen zwei Commits geandert
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 als git diff --stat aber wie gesagt git diff tut nicht das, was der OP wollte.

    – Nutter

    17. November 14 um 16:13 Uhr

git Zeigt alle Dateien an die zwischen zwei Commits geandert
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

1643044087 948 git Zeigt alle Dateien an die zwischen zwei Commits geandert
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.

.

620780cookie-checkgit: Zeigt alle Dateien an, die zwischen zwei Commits geändert wurden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy