git rm
Beschreibung des git rm-Befehls
Der git rm-Befehl entfernt bestimmte Dateien oder eine Gruppe von Dateien aus einem Git-Repository. Die Hauptfunktion von git rm besteht darin, verfolgte Dateien aus dem Index zu entfernen. git rm kann auch verwendet werden, um Dateien sowohl aus dem Staging-Index als auch aus dem Arbeitsverzeichnis zu entfernen. Eine Datei kann jedoch nicht ausschließlich aus dem Arbeitsverzeichnis entfernt werden. Es sei erwähnt, dass der git rm-Befehl keine Branches entfernt. Hinweis: git rm funktioniert nur mit verfolgten Dateien. Der Befehl schlägt fehl, wenn Sie versuchen, eine nicht verfolgte Datei zu entfernen.

Verwendung des git rm-Befehls
<file>… | Gibt an, welche Dateien entfernt werden sollen. |
|---|---|
| -f --force | Überspringt die Sicherheitsprüfung, die sicherstellt, dass die Dateien in HEAD mit dem Inhalt des Staging-Indexes und des Arbeitsverzeichnisses übereinstimmen. |
| -n --dry-run | Führt den git rm-Befehl aus, entfernt die Dateien jedoch nicht tatsächlich. Es wird nur ausgegeben, welche Dateien entfernt worden wären. |
| -r | Dies ist eine Abkürzung für 'rekursiv'. Im rekursiven Modus entfernt git rm ein Zielverzeichnis und seinen gesamten Inhalt. |
| -- | Stellt eine klare Trennung zwischen einer Liste von Dateinamen und den an git rm übergebenen Argumenten her. |
| --cached | Gibt an, dass die Löschung nur im Staging-Index erfolgen soll. Dateien im Arbeitsverzeichnis bleiben unverändert. |
| --ignore-unmatch | Beendet den Befehl mit dem Status 0, auch wenn keine Dateien übereinstimmen. Dies ist ein Unix-Statuscode. |
| -q --quiet | Unterdrückt die Ausgabe des git rm-Befehls. Normalerweise gibt git rm eine Zeile pro entfernter Datei aus. |
Rückgängigmachen von git rm
Der git rm-Befehl aktualisiert den Staging-Index und das Arbeitsverzeichnis. Diese Änderungen werden erst übernommen, wenn ein neuer Commit erstellt wird. Sie können mit Git-Befehlen rückgängig gemacht werden. Um die Löschung aus dem Staging zu nehmen (die Datei bleibt im Arbeitsverzeichnis gelöscht), verwenden Sie: git reset HEAD
git reset HEADUm die Datei vollständig auf ihren neuesten Stand im Staging-Index und im Arbeitsverzeichnis wiederherzustellen, verwenden Sie den modernen git restore-Befehl: git restore
git restore <file>(Hinweis: git checkout . ist für das Wiederherstellen von Dateien veraltet.)
Um eine Datei nur aus dem Staging-Index zu entfernen (sie bleibt im Arbeitsverzeichnis), verwenden Sie das Flag --cached: git rm --cached
git rm --cached <file>Verwenden Sie git reflog, um eine Referenz vor der Ausführung von git rm zu finden, falls git rm ausgeführt und ein neuer Commit erstellt wurde, der die Löschung übernimmt.
git rm vs. rm
Wenn ein gewöhnlicher Shell-rm-Befehl auf eine verfolgte Datei ausgeführt wird, erkennt das Git-Repository dies und aktualisiert nur das Arbeitsverzeichnis, um die Löschung widerzuspiegeln. Um die Änderungen in den Staging-Index zu übernehmen, muss zusätzlich der git add-Befehl ausgeführt werden. Der git rm-Befehl aktualisiert sowohl den Staging-Index als auch das Arbeitsverzeichnis mit der Löschung.
Beispiele
Betrachten wir das folgende Beispiel:
git rm mit Wildcards
git rm folder/\*.txtWir verwenden eine Wildcard-Dateiglob, um alle *.txt-Dateien zu entfernen. Diese Dateien befinden sich direkt im Ordner-Verzeichnis. Wir setzen einen Backslash vor das Sternchen, um zu verhindern, dass die Shell die Wildcard bereits auflöst. Anschließend erweitert die Wildcard die Pfadnamen von Dateien und Unterverzeichnissen.
git rm -f
git rm -f git-*.shDie Force-Option wird im Beispiel verwendet, um die Zieldateien aus dem Arbeitsverzeichnis und dem Staging-Index zu entfernen.
Entfernen von Dateien, die nicht mehr im Dateisystem existieren
Wenn Sie alle gelöschten Dateien als Teil des folgenden Commits erfassen möchten, stagen Sie die Löschungen zunächst mit `git add -u` und führen Sie anschließend `git commit` aus.
Wenn Sie jedoch alle Dateien, die mit dem Shell-Befehl rm gelöscht wurden, kontinuierlich entfernen möchten, verwenden Sie den folgenden Befehl. Er erstellt eine Liste aller im Arbeitsverzeichnis gelöschten Dateien und leitet sie an git rm --cached weiter, um den Staging-Index zu aktualisieren:
git rm --cached
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cachedPractice
Welche Funktionen und Optionen hat der 'git rm'-Befehl?