Close

git rm

Eine häufige Frage bei der ersten Arbeit mit Git ist: "Wie kann ich Git sagen, dass eine Datei (oder mehrere Dateien) nicht mehr verfolgt werden sollen?". Der Befehl git rm wird verwendet, um Dateien aus einem Git-Repository zu entfernen. Er kann als Gegenstück zum Befehl git add betrachtet werden.


Git rm – Übersicht


Der Befehl git rm kann verwendet werden, um einzelne Dateien oder eine Gruppe von Dateien zu entfernen. Die primäre Funktion von git rm ist die Entfernung der verfolgten Dateien aus dem Git-Index. Zusätzlich kann git rm eingesetzt werden, um Dateien aus dem Staging-Index und dem Arbeitsverzeichnis zu entfernen. Es gibt keine Option, mit der eine Datei nur aus dem Arbeitsverzeichnis entfernt werden kann. Die Dateien, mit denen der Befehl arbeitet, müssen mit den Dateien im aktuellen HEAD identisch sein. Falls es eine Diskrepanz zwischen der HEAD-Version einer Datei und dem Staging-Index oder einer Arbeitsbaumversion gibt, blockiert Git das Entfernen. Dies ist eine Sicherheitsvorkehrung, um ein Entfernen von aktuell in Bearbeitung befindlicher Änderungen zu unterbinden.

Beachte, dass git rm keine Branches entfernt. Weitere Informationen dazu findest du unter Verwenden von Git-Branches

Anwendung von "git rebase"


<file>…​

Gibt die zu entfernenden Zieldateien an. Der Optionswert kann eine einzelne Datei, eine mit Leerstellen getrennte Dateiliste file1 file2 file3 oder eine Wildcard-Dateiauswahl (~./directory/*) sein.

-f
--force

Die Option -f wird zur Umgehung der Sicherheitsprüfung verwendet, die Git durchführt, um sicherzustellen, dass die Dateien im HEAD zum aktuellen Inhalt des Staging-Index und des Arbeitsverzeichnisses passen.

Git-Logo
Zugehöriges Material

Git-Merkzettel

Bitbucket-Logo
Lösung anzeigen

Git kennenlernen mit Bitbucket Cloud

-n
--dry-run

Die Option "dry run" ist ein Schutz, mit dem der Befehl git rm ausgeführt, die Dateien aber nicht tatsächlich gelöscht werden. Stattdessen wird ausgegeben, welche Dateien von der Entfernung betroffen wären.

-r

Die Option -r ist die Kurzversion von "recursive". Bei Betrieb im rekursiven Modus entfernt git rm ein Zielverzeichnis und den gesamten Inhalt dieses Verzeichnisses.

--

Die Trennoption wird verwendet, um ausdrücklich zwischen einer Liste von Dateinamen und den an git rm weitergegebenen Argumenten zu unterscheiden. Dies ist nützlich, wenn einige der Dateinamen eine Syntax aufweisen, die mit anderen Optionen verwechselt werden könnte.

--cached

Die Option cached gibt an, dass die Löschung nur im Staging-Index erfolgen soll. Die Dateien im Arbeitsverzeichnis werden nicht angerührt.

--ignore-unmatch

Diese Option führt dazu, dass der Befehl mit einem Sigterm-Status 0 beendet wird, selbst wenn keine passenden Dateien gefunden wurden. Dies ist ein Statuscode auf Unix-Ebene. Der Code 0 zeigt einen erfolgreichen Aufruf des Befehls an. Die Option --ignore-unmatch kann nützlich sein, wenn git rm als Teil eines größeren Shellskripts eingesetzt wird, das kontrolliert fehlschlagen muss.

-q
--quiet

Die Option "quiet" verbirgt die Ausgabe des Befehls git rm. Der Befehl gibt normalerweise eine Zeile für jede entfernte Datei aus.

So wird git rm rückgängig gemacht


Das Ausführen von git rm ist kein permanentes Update. Der Befehl aktualisiert den Staging-Index und das Arbeitsverzeichnis. Diese Änderungen werden erst dauerhaft übertragen, wenn ein neuer Commit erstellt und die Änderungen zum Commit-Verlauf hinzugefügt werden. Dies bedeutet, dass die hier durchgeführten Änderungen auch mit den normalen Git-Befehlen rückgängig gemacht werden können.

git reset HEAD

Ein Reset setzt den aktuellen Staging-Index und das Arbeitsverzeichnis wieder auf den HEAD Commit zurück. Dies macht ein git rm rückgängig.

git checkout .

Ein Checkout hat denselben Effekt und stellt die letzte Version einer Datei aus dem HEAD wieder her.

Für den Fall, dass git rm ausgeführt und ein neuer Commit erstellt wurde, der die Löschung dauerhaft durchführt, kann git reflog verwendet werden, um eine Referenz zu finden, die vor der Ausführung von git rm lag. Weitere Informationen dazu findest du unter Verwenden von git reflog.

Diskussion


Das an den Befehl weitergegebene <file>-Argument kann eine genaue Pfadangabe, Wildcard-Dateiauswahlmuster oder auch genaue Verzeichnisnamen enthalten. Der Befehl entfernt nur Pfade, die aktuell im Git-Repository committet sind.

Die Wildcard-Dateiauswahl ist in allen Verzeichnissen gleich. Man sollte bei der Verwendung von Wildcard-Auswahlen unbedingt vorsichtig sein. Sehen wir uns dazu ein Beispiel an: directory/* und directory*. Das erste Beispiel entfernt alle Unterverzeichnisse von directory/, während das zweite Beispiel alle gleichgeordneten Verzeichnisse wie directory1, directory2, directory_whatever entfernt, was ein unerwartetes Ergebnis sein kann.

Der Umfang von git rm


Der Befehl git rm wird nur auf dem aktuellen Branch ausgeführt. Das Entfernen wird nur auf das Arbeitsverzeichnis und die Staging-Indexbäume angewendet. Die Dateientfernung wird nicht in den Repository-Verlauf übertragen, bis ein neuer Commit erstellt wird.

Warum besser git rm anstatt rm verwenden


Ein Git-Repository erkennt, wenn ein normaler rm Befehl auf einer Datei ausgeführt wurde, die es verfolgt. Das Arbeitsverzeichnis wird aktualisiert, um die Entfernung zu veranschaulichen. Der Staging-Index wird aber nicht mit der Entfernung aktualisiert. Auf den entfernten Dateipfaden muss ein zusätzlicher git add-Befehl ausgeführt werden, um die Änderungen zum Staging-Index hinzuzufügen. Der Befehl git rm funktioniert wie ein Shortcut, da hier das Arbeitsverzeichnis und der Staging-Index mit der Entfernung aktualisiert werden.

Beispiele


git rm Documentation/\*.txt

In diesem Beispiel wird eine Wildcard-Dateiauswahl verwendet, um alle *.txt Dateien zu entfernen, die im Verzeichnis Documentation oder einem seiner Unterverzeichnisse liegen.

Beachte, dass das Sternchen * in diesem Beispiel mit Schrägstrichen beendet wird. Dadurch wird verhindert, dass in der Befehlsshell das Wildcard-Symbol erweitert wird. Die Wildcard erweitert dann die Verzeichnisnamen um Dateien und Unterverzeichnisse unterhalb des Verzeichnisses Documentation/.

git rm -f git-*.sh

In diesem Beispiel wird die Option "force" eingesetzt und es werden alle Wildcard-git-*.sh-Dateien angesprochen. Die Force-Option entfernt die Zieldateien explizit aus dem Arbeitsverzeichnis und dem Staging-Index.

So werden Dateien gelöscht, die nicht mehr im Dateisystem sind


Wie bereits oben in "Warum besser git rm anstatt rm verwenden" erklärt, ist git rm ein sehr praktischer Befehl, der die Standardshells rm und git add kombiniert, um eine Datei aus dem Arbeitsverzeichnis zu entfernen und diese Entfernung in den Staging-Index zu übertragen. Wenn mehrere Dateien nur mit dem einfachen Befehl rm entfernt werden, kann ein Repository schnell unhandlich werden.

Wenn alle explizit entfernten Dateien als Teil des nächsten Commits aufgezeichnet werden sollen, fügt git commit -a in Vorbereitung des nächsten Commits alle Entfernereignisse dem Staging-Index hinzu.

Falls jedoch die mit rm entfernten Dateien dauerhaft entfernt werden sollen, verwendest du den folgenden Befehl:

git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached

Dieser Befehl erzeugt eine Liste der aus dem Arbeitsverzeichnis entfernten Dateien und leitet diese Liste an git rm --cached weiter, was dann den Staging-Index aktualisiert.

Zusammenfassung zu Git rm


git rm ist ein Befehl, der zwei der primären internen Statusmanagementbäume von Git bearbeitet: das Arbeitsverzeichnis und den Staging-Index. git rm wird verwendet, um eine Datei aus einem Git-Repository zu entfernen. Dies ist eine praktische Methode, da die Ergebnisse der Standardshell rm mit git add kombiniert werden. Dies bedeutet, dass zuerst ein Ziel aus dem Dateisystem entfernt und dann das Entfernereignis zum Staging-Index hinzugefügt wird. Der Befehl ist einer von vielen, die eingesetzt werden können, um Änderungen in Git rückgängig zu machen.


Diesen Artikel teilen
Nächstes Thema

Lesenswert

Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.

Mitarbeiter arbeiten mit unzähligen Tools zusammen

Bitbucket-Blog

Abbildung: DevOps

DevOps-Lernpfad

Demo Den: Feature-Demos mit Atlassian-Experten

So funktioniert Bitbucket Cloud mit Atlassian Open DevOps

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up