So prüfen Sie, ob eine Datei in einem bestimmten Commit geändert wurde

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 eine bestimmte Datei in einem bestimmten Git-Commit geändert wurde. Wir werden verschiedene Git-Befehle untersuchen, um dies zu erreichen.

Sie beginnen damit, den Befehl git show --name-only zu verwenden, um die in einem Commit geänderten Dateien anzuzeigen. Dann lernen Sie, wie Sie git diff-tree nutzen können, um Dateiänderungen zwischen Commits zu untersuchen. Abschließend testen Sie diese Methoden mit unveränderten Dateien, um ihr Verhalten zu bestätigen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BasicOperationsGroup -.-> git/rm("Remove Files") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560034{{"So prüfen Sie, ob eine Datei in einem bestimmten Commit geändert wurde"}} git/status -.-> lab-560034{{"So prüfen Sie, ob eine Datei in einem bestimmten Commit geändert wurde"}} git/diff -.-> lab-560034{{"So prüfen Sie, ob eine Datei in einem bestimmten Commit geändert wurde"}} git/rm -.-> lab-560034{{"So prüfen Sie, ob eine Datei in einem bestimmten Commit geändert wurde"}} git/log -.-> lab-560034{{"So prüfen Sie, ob eine Datei in einem bestimmten Commit geändert wurde"}} end

Verwenden von git show --name-only für einen Commit

In diesem Schritt lernen wir, wie wir den Befehl git show verwenden können, um mehr Details zu einem bestimmten Commit zu erhalten. Während git log uns eine Zusammenfassung der Commits zeigt, ermöglicht es uns git show, in eine einzelne Zeitkapsel zu schauen.

Lassen Sie uns git show verwenden, um die Details unseres ersten Commits anzuzeigen. Wir fügen auch die Option --name-only hinzu, um nur die Namen der Dateien zu sehen, die in diesem Commit geändert wurden.

Zunächst stellen Sie sicher, dass Sie sich im Verzeichnis my-time-machine befinden:

cd ~/project/my-time-machine

Jetzt führen Sie den Befehl git show mit der Option --name-only aus. Sie können HEAD verwenden, um auf den neuesten Commit zu verweisen:

git show --name-only HEAD

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

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

    Send a message to the future

message.txt

Lassen Sie uns die Ausgabe analysieren:

  • Der erste Teil ähnelt dem, was Sie mit git log gesehen haben und zeigt die Commit-Details (Commit-ID, Autor, Datum und Nachricht).
  • Die letzte Zeile, message.txt, ist die Ausgabe der Option --name-only. Sie sagt uns, dass die Datei message.txt in diesem Commit geändert wurde.

Der Befehl git show ist unglaublich nützlich, um einzelne Commits zu untersuchen. Sie können ihn verwenden, um genau zu sehen, welche Änderungen in einem bestimmten Commit vorgenommen wurden, welche Dateien betroffen waren und welche Commit-Nachricht mit diesen Änderungen verbunden ist. Dies hilft Ihnen, die Historie Ihres Projekts im Detail zu verstehen.

Im nächsten Schritt werden wir eine andere Möglichkeit untersuchen, Dateiänderungen zwischen Commits anzuzeigen, indem wir git diff-tree verwenden.

Ausführen von git diff-tree für Dateiänderungen

In diesem Schritt werden wir einen anderen Befehl untersuchen, um zu sehen, welche Dateien in einem Commit geändert wurden: git diff-tree. Dieser Befehl wird oft in Skripten und Automatisierungen verwendet, ist aber auch hilfreich, um zu verstehen, wie Git Änderungen verfolgt.

Stellen Sie sicher, dass Sie sich immer noch im Verzeichnis ~/project/my-time-machine befinden.

Wir benötigen die Commit-ID unseres ersten Commits. Sie können diese erhalten, indem Sie git log --oneline ausführen:

git log --oneline

Sie sollten eine Ausgabe wie die folgende sehen (Ihre Commit-ID wird anders sein):

a1b2c3d (HEAD -> master) Send a message to the future

Kopieren Sie die ersten 7 Zeichen der Commit-ID (z.B. a1b2c3d).

Jetzt führen Sie den Befehl git diff-tree aus. Wir verwenden die Option -r, um Änderungen rekursiv anzuzeigen, und die Option --name-only, um nur die Dateinamen anzuzeigen. Ersetzen Sie YOUR_COMMIT_ID durch die Commit-ID, die Sie kopiert haben:

git diff-tree -r --name-only YOUR_COMMIT_ID

Beispielsweise würden Sie, wenn Ihre Commit-ID a1b2c3d war, folgenden Befehl ausführen:

git diff-tree -r --name-only a1b2c3d

Sie sollten eine Ausgabe wie die folgende sehen:

message.txt

Auch dieser Befehl zeigt uns, dass message.txt die Datei war, die in diesem Commit geändert wurde.

Während git show --name-only für die interaktive Verwendung oft bequemer ist, ist git diff-tree ein leistungsstarker Befehl zum Vergleichen von Bäumen (Snapshots Ihres Projekts) und wird häufig in fortgeschritteneren Git-Workflows und Skripten verwendet. Das Verständnis dafür, dass Git Änderungen zwischen diesen Snapshots verfolgt, ist der Schlüssel zur Beherrschung der Versionskontrolle.

Testen von unveränderten Dateien

In diesem letzten Schritt werden wir bestätigen, dass Git Dateien korrekt erkennt, die seit dem letzten Commit nicht geändert wurden. Dies unterstreicht das Konzept, dass Git nur Änderungen verfolgt.

Stellen Sie sicher, dass Sie sich im Verzeichnis ~/project/my-time-machine befinden.

Führen Sie erneut den Befehl git status aus:

git status

Sie sollten eine Ausgabe wie die folgende sehen:

On branch master
nothing to commit, working tree clean

Diese Meldung sagt uns, dass es keine Änderungen in unserem Arbeitsverzeichnis gibt, die committet werden müssen. Git erkennt, dass die Datei message.txt genau so ist wie im letzten Commit.

Jetzt erstellen wir eine neue, nicht verwaltete Datei, um zu sehen, wie Git darauf reagiert:

echo "This is a temporary file" > temp.txt

Führen Sie erneut git status aus:

git status

Sie sollten jetzt sehen:

On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        temp.txt

nothing added to commit but untracked files present (use "git add" to track)

Git erkennt temp.txt korrekt als nicht verwaltete Datei, da wir Git noch nicht mit git add angewiesen haben, sie zu verwalten. Dies zeigt, dass Git sich der Dateien in Ihrem Verzeichnis bewusst ist, aber nur aktiv diejenigen verfolgt, die Sie dem Repository hinzugefügt haben.

Schließlich löschen wir die temporäre Datei:

rm temp.txt

Führen Sie git status noch einmal aus:

git status

Sie sollten wieder im Zustand "nothing to commit, working tree clean" sein.

Dieser Schritt zeigt, wie Git Ihnen hilft, Ihr Projekt zu verwalten, indem es klar zeigt, welche Dateien geändert wurden, welche für den nächsten Commit vorgemerkt sind und welche nicht verwaltet werden. Diese klare Statusinformation ist für eine effektive Versionskontrolle von entscheidender Bedeutung.

Zusammenfassung

In diesem Lab haben wir gelernt, wie man mithilfe von Git prüft, ob eine Datei in einem bestimmten Commit geändert wurde. Wir haben begonnen, indem wir den Befehl git show --name-only verwendet haben, um die Details eines Commits anzuzeigen und nur die Namen der geänderten Dateien aufzulisten. Dies bot eine schnelle Möglichkeit, zu sehen, welche Dateien durch einen bestimmten Commit betroffen waren.

Anschließend haben wir den Befehl git diff-tree als weitere Methode zur Identifizierung von Dateiänderungen innerhalb eines Commits untersucht. Obwohl git diff-tree oft in Skripten verwendet wird, hilft das Verständnis dieses Befehls dabei, zu verstehen, wie Git Änderungen verfolgt. Diese Befehle sind wertvolle Werkzeuge, um die Historie eines Projekts zu untersuchen und die in einzelnen Commits vorgenommenen Änderungen zu verstehen.