So prüfen Sie, ob ein Git-Commit eine bestimmte Datei geändert hat

GitGitBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen Sie, wie Sie prüfen können, ob ein bestimmter Git-Commit eine bestimmte Datei geändert hat. Wir werden zwei verschiedene Methoden untersuchen, um dies zu erreichen: die Verwendung des Befehls git show --name-only für einen schnellen Überblick über die geänderten Dateien und die Nutzung des grundlegenderen Befehls git diff-tree mit relevanten Optionen, um Dateiänderungen innerhalb eines Commits zu identifizieren.

Anhand praktischer Beispiele werden Sie sehen, wie diese Befehle wertvolle Einblicke in die durch einen Commit vorgenommenen Änderungen geben und Ihnen helfen, den Umfang und die Auswirkungen historischer Commits in Ihrem Git-Repository zu verstehen. Wir werden diese Methoden auch mit unveränderten Dateien testen, um Ihr Verständnis zu festigen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/diff -.-> lab-560068{{"So prüfen Sie, ob ein Git-Commit eine bestimmte Datei geändert hat"}} git/log -.-> lab-560068{{"So prüfen Sie, ob ein Git-Commit eine bestimmte Datei geändert hat"}} end

Ausführen von git show --name-only

In diesem Schritt werden wir untersuchen, wie man mithilfe des Befehls git show Informationen über einen bestimmten Commit anzeigen kann. Dieser Befehl ist äußerst nützlich, um die Details eines Commits zu untersuchen, einschließlich der von ihm vorgenommenen Änderungen.

Wir werden die Option --name-only mit git show verwenden. Diese Option teilt Git mit, nur die Namen der Dateien anzuzeigen, die in diesem Commit geändert wurden. Dies ist eine schnelle Möglichkeit, zu sehen, welche Dateien betroffen sind.

Zunächst stellen wir sicher, dass wir uns in unserem Projektverzeichnis befinden. Öffnen Sie Ihr Terminal und navigieren Sie zum Verzeichnis my-time-machine:

cd ~/project/my-time-machine

Nun verwenden wir git show mit der Option --name-only, um die in unserem letzten Commit geänderten Dateien anzuzeigen. Denken Sie daran, dass in unserem letzten Commit die Datei message.txt hinzugefügt wurde.

git show --name-only HEAD

Hierbei ist HEAD ein spezieller Zeiger in Git, der auf den neuesten Commit in Ihrem aktuellen Branch verweist.

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

message.txt

Die Ausgabe zeigt die Commit-Details (Commit-Hash, Autor, Datum und Nachricht) gefolgt vom Namen der Datei, die in diesem Commit geändert wurde, nämlich message.txt.

Die Verwendung von git show --name-only ist eine schnelle Möglichkeit, eine Zusammenfassung darüber zu erhalten, welche Dateien in einem bestimmten Commit geändert wurden, ohne den vollständigen Diff (die tatsächlichen Änderungen innerhalb der Dateien) zu sehen. Dies ist hilfreich, wenn Sie nur den Umfang eines Commits wissen möchten.

Verwenden von git diff-tree für Dateiänderungen

In diesem Schritt werden wir eine andere Möglichkeit untersuchen, die in einem Commit geänderten Dateien anzuzeigen, indem wir den Befehl git diff-tree verwenden. Während git show --name-only eine gängige Methode ist, ist git diff-tree ein grundlegendere Befehl, der die Unterschiede zwischen zwei Tree-Objekten (die den Zustand Ihres Projekts bei einem bestimmten Commit repräsentieren) zeigt.

Wir werden git diff-tree mit den Optionen -r und --name-only verwenden. Die Option -r macht den Befehl rekursiv, was bedeutet, dass er auch in Unterverzeichnisse schaut. Die Option --name-only listet, ähnlich wie bei git show, nur die Namen der Dateien auf, die sich unterscheiden.

Stellen Sie zunächst sicher, dass Sie sich im Verzeichnis my-time-machine befinden:

cd ~/project/my-time-machine

Nun verwenden wir git diff-tree, um die in unserem neuesten Commit geänderten Dateien anzuzeigen. Wir benötigen den Commit-Hash (die eindeutige Kennung) des Commits. Sie können diesen aus der Ausgabe von git log oder git show erhalten. Für unseren ersten Commit können Sie auch HEAD verwenden.

git diff-tree -r --name-only HEAD

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

message.txt

Diese Ausgabe ist einfacher als die von git show --name-only, da git diff-tree hauptsächlich darauf abzielt, die Unterschiede zwischen Tree-Objekten zu zeigen, nicht die vollständigen Commit-Details. Wenn es mit --name-only verwendet wird, listet es einfach die Dateien auf, die zwischen dem Eltern-Commit und dem Commit selbst hinzugefügt, gelöscht oder geändert wurden. Da unser erster Commit keinen Eltern-Commit hatte, zeigt es die in diesem Commit hinzugefügten Dateien an.

Das Verständnis von git diff-tree ist nützlich, da es sich um einen unteren Ebenen-Befehl handelt, den andere Git-Befehle oft intern verwenden. Es hilft Ihnen zu verstehen, wie Git Änderungen zwischen verschiedenen Versionen Ihres Projekts verfolgt.

Test mit unveränderten Dateien

In den vorherigen Schritten haben wir gesehen, wie git show --name-only und git diff-tree -r --name-only die Dateien anzeigen, die in einem bestimmten Commit geändert wurden. Jetzt schauen wir uns an, was passiert, wenn wir diese Befehle für einen Commit ausführen, in dem keine Dateien geändert wurden (was in unserem Fall mit nur einem Commit nicht der Fall ist, aber wir können das Konzept simulieren).

Da unser aktuelles Repository nur einen Commit hat, in dem eine Datei hinzugefügt wurde, wird die Ausführung dieser Befehle für diesen Commit immer message.txt anzeigen. Um das Konzept der Anzeige nur geänderter Dateien zu veranschaulichen, stellen wir uns vor, wir hätten einen Commit, in dem keine Dateien geändert wurden (dies passiert normalerweise bei Merge-Commits oder Commits, die nur Metadaten ändern, aber in dieser Übung konzentrieren wir uns auf die Ausgabe, wenn keine Dateien aufgeführt werden).

Wenn Sie git show --name-only oder git diff-tree -r --name-only für einen Commit ausführen, in dem keine Dateien geändert wurden, wäre der Teil der Ausgabe, der die Dateinamen enthält, leer.

Lassen Sie uns die Befehle erneut ausführen, die wir gelernt haben, um das Konzept zu festigen. Stellen Sie sicher, dass Sie sich im Verzeichnis my-time-machine befinden:

cd ~/project/my-time-machine

Führen Sie git show --name-only erneut aus:

git show --name-only HEAD

Die Ausgabe wird ähnlich wie folgt aussehen:

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

message.txt

Jetzt führen Sie git diff-tree -r --name-only erneut aus:

git diff-tree -r --name-only HEAD

Die Ausgabe wird sein:

message.txt

Beide Befehle zeigen korrekt message.txt an, weil diese Datei in diesem Commit hinzugefügt wurde. Der wichtigste Punkt hier ist, dass diese Befehle dazu gedacht sind, nur die Dateien aufzulisten, die in dem angegebenen Commit geändert (hinzugefügt, gelöscht oder modifiziert) wurden. Wenn ein Commit keine Dateien ändert, würden diese Befehle (insbesondere der Teil, der die Dateien auflistet) nichts anzeigen.

Dieses Verhalten ist wichtig, um den Umfang der Änderungen zu verstehen, die durch einen Commit eingeführt wurden. Es hilft Ihnen, schnell zu erkennen, welche Teile Ihres Projekts durch eine bestimmte Änderung betroffen sind.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man prüft, welche Dateien in einem bestimmten Git-Commit geändert wurden. Wir haben zwei Hauptmethoden untersucht: die Verwendung von git show --name-only und git diff-tree mit den Optionen -r und --name-only.

Wir haben zunächst git show --name-only HEAD verwendet, um schnell die Namen der im neuesten Commit geänderten Dateien anzuzeigen, was seine Nützlichkeit für eine knappe Übersicht zeigt. Anschließend haben wir git diff-tree, einen grundlegendere Befehl, eingeführt und ihn mit den Optionen -r und --name-only verwendet, um ein ähnliches Ergebnis zu erzielen, wobei wir seinen zugrunde liegenden Mechanismus zum Vergleich von Tree-Objekten hervorgehoben haben. Schließlich haben wir diese Befehle mit Commits getestet, in denen keine bestimmte Datei geändert wurde, um ihr Verhalten zu bestätigen und es zu verstehen.