Wie erhalte ich eine Liste aller Dateien, die sich zwischen zwei Git-Commits geändert haben?
178
Aus bürokratischen Gründen muss ich für einen Bericht eine Liste aller geänderten Dateien in meinem Repository abrufen (ich habe mit dem vorhandenen Quellcode begonnen).
Was soll ich ausführen, um diese Liste zu erhalten?
Für Dateien, die zwischen einem bestimmten SHA und Ihrem aktuellen Commit geändert wurden:
git diff --name-only <starting SHA> HEAD
oder wenn Sie geänderte, aber noch nicht festgeschriebene Dateien einschließen möchten:
git diff --name-only <starting SHA>
Im Allgemeinen sagt Ihnen die folgende Syntax immer, welche Dateien zwischen zwei Commits geändert wurden (angegeben durch ihre SHAs oder andere Namen):
und wenn Sie wissen möchten, welche Dateien für ein bestimmtes Commit geändert wurden, gehen Sie wie git diff --name-only <SHA> <SHA>^
folgt vor
3
Die Verwendung des --name-statusFlags anstelle von --name-onlyist praktisch, um eine Liste der Dateien abzurufen und deren Änderungsstatus anzuzeigen, z. B. Hinzugefügt oder Geändert.
Thane Plummer
@ Amber sollte die Notizen von @Thane Plummer erwähnen, die --name-statuszeigen, was mit ihnen passiert ist
Zoltán Süle
64
So finden Sie die Namen aller Dateien, die seit Ihrem letzten Commit geändert wurden:
git diff --name-only
Oder (für ein bisschen mehr Informationen, einschließlich nicht verfolgter Dateien):
So listen Sie alle nicht verfolgten Dateien auf (die von aufgelisteten git status, also keine ignorierten Dateien):
git ls-files --other --exclude-standard
Wenn Sie dies in einem Shell-Skript verwenden und programmgesteuert prüfen möchten, ob diese Befehle etwas zurückgegeben haben, interessiert Sie git diffdie --exit-codeOption.
Wenn ich viele Dateien hinzugefügt / geändert / gelöscht habe (seit dem letzten Festschreiben), möchte ich diese Änderungen in chronologischer Reihenfolge betrachten.
Dafür benutze ich:
So listen Sie alle nicht bereitgestellten Dateien auf:
Warum nicht einen xargseinzigen Anruf von verwenden stat? Der volle git ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
Einzeiler
@ruvim Danke. Sehr guter Vorschlag. Ich habe die Antwort so bearbeitet, dass sie Ihren Kommentar enthält, um die Sichtbarkeit zu verbessern.
VonC
4
Ich benötige eine Liste von Dateien, deren Inhalt zwischen zwei Commits geändert wurde (nur hinzugefügt oder geändert). Daher habe ich Folgendes verwendet:
Diff-Filter = [(A | C | D | M | R | T | U | X | B)… [*]]
Wählen Sie nur Dateien aus, die hinzugefügt (A), kopiert (C), gelöscht (D), geändert (M), umbenannt (R) sind und deren Typ (dh reguläre Datei, Symlink, Submodul, ...) geändert wurde (T). sind nicht zusammengeführt (U), sind unbekannt (X) oder haben ihre Paarung gebrochen (B). Es kann eine beliebige Kombination der Filterzeichen (einschließlich keiner) verwendet werden. Wenn der Kombination * (Alles oder Nichts) hinzugefügt wird, werden alle Pfade ausgewählt, wenn eine Datei vorhanden ist, die anderen Kriterien im Vergleich entspricht. Wenn keine Datei vorhanden ist, die anderen Kriterien entspricht, wird nichts ausgewählt.
Außerdem können diese Großbuchstaben zum Ausschließen in Kleinbuchstaben geschrieben werden. ZB --diff-filter = ad schließt hinzugefügte und gelöschte Pfade aus.
Wenn Sie auch den Status auflisten möchten (z. B. A / M), wechseln Sie --name-onlyzu --name-status.
Die Liste der nicht bereitgestellten Änderungen kann mit git statusund dem folgenden grepBefehl abgerufen werden . So etwas wie git status -s | grep M:
root@user-ubuntu:~/project-repo-directory# git status -s | grep '^ M'
M src/.../file1.js
M src/.../file2.js
M src/.../file3.js
....
Beachten Sie, dass dies nur für nicht bereitgestellte Änderungen verwendet werden kann. Daher ist es nicht nützlich für "Dateien, die sich zwischen zwei Git-Commits geändert haben"
John Vandenberg,
2
Mit git showkönnen Sie ein ähnliches Ergebnis erzielen. git logVerwenden Sie zum Anzeigen des Commits (wie es in der Ansicht aussieht ) mit der Liste der enthaltenen Dateien:
git show --name-only [commit-id_A]^..[commit-id_B]
Wo [commit-id_A]ist das anfängliche Commit und [commit-id_B]das letzte Commit, als Sie anzeigen möchten?
Besondere Aufmerksamkeit mit ^Symbol. Wenn Sie dies nicht angeben, werden die Commit-ID_A-Informationen nicht bereitgestellt.
Wenn Sie die geänderten Dateien überprüfen möchten, müssen Sie sich um viele kleine Dinge kümmern, z. B. welche am besten zu verwenden sind, z. B. wenn Sie überprüfen möchten, welche der geänderten Dateien nur eingegeben wurden
Git-Status - Zeigt die Dateien mit den Änderungen an
Wenn Sie dann wissen möchten, welche Änderungen vorgenommen werden sollen, können Sie dies auf verschiedene Weise überprüfen.
git diff - zeigt alle Änderungen in allen Dateien an
Es ist nur dann gut, wenn nur eine Datei geändert wird
und wenn Sie eine bestimmte Datei überprüfen möchten, verwenden Sie
Antworten:
Für Dateien, die zwischen einem bestimmten SHA und Ihrem aktuellen Commit geändert wurden:
oder wenn Sie geänderte, aber noch nicht festgeschriebene Dateien einschließen möchten:
Im Allgemeinen sagt Ihnen die folgende Syntax immer, welche Dateien zwischen zwei Commits geändert wurden (angegeben durch ihre SHAs oder andere Namen):
quelle
git diff --name-only <SHA> <SHA>^
--name-status
Flags anstelle von--name-only
ist praktisch, um eine Liste der Dateien abzurufen und deren Änderungsstatus anzuzeigen, z. B. Hinzugefügt oder Geändert.--name-status
zeigen, was mit ihnen passiert istSo finden Sie die Namen aller Dateien, die seit Ihrem letzten Commit geändert wurden:
Oder (für ein bisschen mehr Informationen, einschließlich nicht verfolgter Dateien):
quelle
So listen Sie alle nicht bereitgestellten nachverfolgten geänderten Dateien auf:
So listen Sie alle inszenierten nachverfolgten geänderten Dateien auf:
So listen Sie alle bereitgestellten und nicht bereitgestellten nachverfolgten geänderten Dateien auf:
So listen Sie alle nicht verfolgten Dateien auf (die von aufgelisteten
git status
, also keine ignorierten Dateien):Wenn Sie dies in einem Shell-Skript verwenden und programmgesteuert prüfen möchten, ob diese Befehle etwas zurückgegeben haben, interessiert Sie
git diff
die--exit-code
Option.quelle
Wenn ich viele Dateien hinzugefügt / geändert / gelöscht habe (seit dem letzten Festschreiben), möchte ich diese Änderungen in chronologischer Reihenfolge betrachten.
Dafür benutze ich:
So listen Sie alle nicht bereitgestellten Dateien auf:
So erhalten Sie das Datum der letzten Änderung für jede Datei:
Obwohl Ruvim in den Kommentaren vorschlägt :
So sortieren Sie sie vom ältesten zum neueren:
Ein Alias erleichtert die Verwendung:
Oder (kürzer und effizienter dank ruvim )
Beispielsweise:
Ich kann jetzt meine Änderungen überprüfen, von den ältesten bis zu den neueren.
quelle
xargs
einzigen Anruf von verwendenstat
? Der vollegit ls-files -z --other --modified --exclude-standard | xargs -0 stat -c '%y %n' -- | sort
Ich benötige eine Liste von Dateien, deren Inhalt zwischen zwei Commits geändert wurde (nur hinzugefügt oder geändert). Daher habe ich Folgendes verwendet:
Die verschiedenen Diff-Filter-Optionen aus der Git Diff-Dokumentation :
Wenn Sie auch den Status auflisten möchten (z. B. A / M), wechseln Sie
--name-only
zu--name-status
.quelle
Die Liste der nicht bereitgestellten Änderungen kann mit
git status
und dem folgendengrep
Befehl abgerufen werden . So etwas wiegit status -s | grep M
:quelle
Mit
git show
können Sie ein ähnliches Ergebnis erzielen.git log
Verwenden Sie zum Anzeigen des Commits (wie es in der Ansicht aussieht ) mit der Liste der enthaltenen Dateien:Wo
[commit-id_A]
ist das anfängliche Commit und[commit-id_B]
das letzte Commit, als Sie anzeigen möchten?Besondere Aufmerksamkeit mit
^
Symbol. Wenn Sie dies nicht angeben, werden die Commit-ID_A-Informationen nicht bereitgestellt.quelle
Wenn Sie die geänderten Dateien überprüfen möchten, müssen Sie sich um viele kleine Dinge kümmern, z. B. welche am besten zu verwenden sind, z. B. wenn Sie überprüfen möchten, welche der geänderten Dateien nur eingegeben wurden
Git-Status - Zeigt die Dateien mit den Änderungen an
Wenn Sie dann wissen möchten, welche Änderungen vorgenommen werden sollen, können Sie dies auf verschiedene Weise überprüfen.
git diff - zeigt alle Änderungen in allen Dateien an
Es ist nur dann gut, wenn nur eine Datei geändert wird
und wenn Sie eine bestimmte Datei überprüfen möchten, verwenden Sie
Git Diff
quelle