Testen von nicht existierenden Dateien
In den vorherigen Schritten haben wir erfolgreich git ls-tree
und git log -- <Datei>
verwendet, um eine Datei zu untersuchen, die in unserem Git-Repository existiert. Jetzt wollen wir sehen, was passiert, wenn wir versuchen, diese Befehle auf eine Datei anzuwenden, die in der Historie des Repositorys nicht existiert.
Stellen Sie sicher, dass Sie sich in Ihrem Projektverzeichnis befinden:
cd ~/project/my-time-machine
Zunächst versuchen wir, git ls-tree
auf eine nicht existierende Datei anzuwenden, beispielsweise nonexistent.txt
:
git ls-tree HEAD nonexistent.txt
Sie sollten keine Ausgabe sehen. Dies liegt daran, dass git ls-tree
nur Einträge auflistet, die im angegebenen Baum (in diesem Fall der Baum bei HEAD
) vorhanden sind. Da nonexistent.txt
nicht im Baum des neuesten Commits ist, wird nichts angezeigt.
Jetzt versuchen wir, git log
auf dieselbe nicht existierende Datei anzuwenden:
git log -- nonexistent.txt
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
fatal: no such path 'nonexistent.txt' in HEAD
Dies ist ein unterschiedliches Verhalten! git log -- <Datei>
sucht speziell nach Commits, die den angegebenen Dateipfad im Laufe der Historie beeinflusst haben. Wenn der Dateipfad in keinem Commit jemals existiert hat, teilt Ihnen Git mit, dass es "keinen solchen Pfad" gibt.
Dieser Unterschied im Verhalten zeigt, wie diese Befehle funktionieren:
git ls-tree
untersucht einen bestimmten Snapshot (Commit) und listet dessen Inhalt auf.
git log -- <Datei>
durchsucht die gesamte Historie nach Änderungen, die sich auf einen bestimmten Dateipfad beziehen.
Das Verständnis dieser Unterschiede hilft Ihnen, den richtigen Befehl für die Aufgabe auszuwählen. Wenn Sie sehen möchten, welche Dateien in einem Commit enthalten waren, verwenden Sie git ls-tree
. Wenn Sie die Historie einer Datei sehen möchten, verwenden Sie git log -- <Datei>
.