English ▾ Themen ▾ Neueste Version ▾ git-rm zuletzt aktualisiert in 2.50.0

NAME

git-rm - Dateien aus dem Arbeitsverzeichnis und vom Index entfernen

SYNOPSIS

git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch]
       [--quiet] [--pathspec-from-file=<file> [--pathspec-file-nul]]
       [--] [<pathspec>…​]

BESCHREIBUNG

Entfernt Dateien, die mit pathspec übereinstimmen, vom Index oder vom Arbeitsverzeichnis und vom Index. git rm entfernt eine Datei nicht nur aus Ihrem Arbeitsverzeichnis. (Es gibt keine Option, eine Datei nur aus dem Arbeitsverzeichnis zu entfernen und sie dennoch im Index zu belassen; verwenden Sie /bin/rm, wenn Sie dies tun möchten.) Die zu entfernenden Dateien müssen mit der Spitze des Branches identisch sein, und es dürfen keine Updates ihrer Inhalte im Index vorgemerkt sein, obwohl dieses Standardverhalten mit der Option -f überschrieben werden kann. Wenn --cached angegeben ist, muss der vorgemerkte Inhalt entweder mit der Spitze des Branches oder mit der Datei auf der Festplatte übereinstimmen, sodass die Datei nur aus dem Index entfernt werden kann. Wenn Sparse-Checkouts verwendet werden (siehe git-sparse-checkout[1]), entfernt git rm nur Pfade innerhalb der Sparse-Checkout-Muster.

OPTIONEN

<pathspec>...

Zu entfernende Dateien. Ein führender Verzeichnisname (z. B. dir zum Entfernen von dir/file1 und dir/file2) kann angegeben werden, um alle Dateien im Verzeichnis und rekursiv alle Unterverzeichnisse zu entfernen. Dies erfordert jedoch die explizite Angabe der Option -r.

Der Befehl entfernt nur die Pfade, die Git bekannt sind.

Dateinamen-Wildcards passen über Verzeichnissgrenzen hinweg. Daher gibt es bei zwei Verzeichnissen d und d2 einen Unterschied zwischen der Verwendung von git rm d*' und git rm d/*', da erstere auch das gesamte Verzeichnis d2 entfernt.

Weitere Einzelheiten finden Sie im Eintrag <pathspec> in gitglossary[7].

-f
--force

Überschreibt die Prüfung auf Aktualität.

-n
--dry-run

Entfernt keine Dateien tatsächlich. Zeigt stattdessen nur an, ob sie im Index vorhanden sind und ansonsten vom Befehl entfernt würden.

-r

Ermöglicht die rekursive Entfernung, wenn ein führender Verzeichnisname angegeben wird.

--

Diese Option kann verwendet werden, um Befehlszeilenoptionen von der Liste der Dateien zu trennen (nützlich, wenn Dateinamen mit Befehlszeilenoptionen verwechselt werden könnten).

--cached

Verwenden Sie diese Option, um Pfade nur vom Index zu de-staging und zu entfernen. Arbeitsverzeichnisdateien, ob modifiziert oder nicht, bleiben unberührt.

--ignore-unmatch

Beendet mit einem Nullstatus, auch wenn keine Dateien übereinstimmten.

--sparse

Ermöglicht das Aktualisieren von Indexeinträgen außerhalb des Sparse-Checkout-Kegels. Normalerweise weigert sich git rm, Indexeinträge zu aktualisieren, deren Pfade nicht in den Sparse-Checkout-Kegel passen. Weitere Informationen finden Sie unter git-sparse-checkout[1].

-q
--quiet

git rm gibt normalerweise für jede entfernte Datei eine Zeile (in Form eines rm-Befehls) aus. Diese Option unterdrückt diese Ausgabe.

--pathspec-from-file=<file>

Pathspec wird in <file> anstelle von Argumenten übergeben. Wenn <file> exakt - ist, wird die Standardeingabe verwendet. Pathspec-Elemente werden durch LF oder CR/LF getrennt. Pathspec-Elemente können wie für die Konfigurationsvariable core.quotePath erklärt zitiert werden (siehe git-config[1]). Siehe auch --pathspec-file-nul und global --literal-pathspecs.

--pathspec-file-nul

Nur relevant mit --pathspec-from-file. Pfadangaben werden durch ein NUL-Zeichen getrennt und alle anderen Zeichen werden wörtlich genommen (einschließlich Zeilenumbrüchen und Anführungszeichen).

DATEIEN ENTFERNEN, DIE AUS DEM DATEISYSTEM VERSCHWUNDEN SIND

Es gibt keine Option für git rm, um nur die Pfade aus dem Index zu entfernen, die aus dem Dateisystem verschwunden sind. Je nach Anwendungsfall gibt es jedoch mehrere Möglichkeiten, dies zu tun.

Verwendung von "git commit -a"

Wenn Sie möchten, dass Ihr nächster Commit alle Modifikationen verfolgter Dateien im Arbeitsverzeichnis aufzeichnet und alle Entfernungen von Dateien aufzeichnet, die mit rm (im Gegensatz zu git rm) aus dem Arbeitsverzeichnis entfernt wurden, verwenden Sie git commit -a, da dies alle Entfernungen automatisch erkennt und aufzeichnet. Sie können auch eine ähnliche Wirkung erzielen, ohne zu committen, indem Sie git add -u verwenden.

Verwendung von "git add -A"

Wenn Sie einen neuen Code-Drop für einen Vendor-Branch akzeptieren, möchten Sie wahrscheinlich sowohl die Entfernung von Pfaden als auch das Hinzufügen neuer Pfade sowie Modifikationen bestehender Pfade aufzeichnen.

Typischerweise würden Sie zuerst alle verfolgten Dateien mit diesem Befehl aus dem Arbeitsverzeichnis entfernen

git ls-files -z | xargs -0 rm -f

und dann den neuen Code im Arbeitsverzeichnis entpacken. Alternativ könnten Sie die Änderungen mit rsync in das Arbeitsverzeichnis übertragen.

Danach ist der einfachste Weg, alle Entfernungen, Hinzufügungen und Modifikationen im Arbeitsverzeichnis aufzuzeichnen:

git add -A

Siehe git-add[1].

Andere Wege

Wenn Sie nur die Dateien aus dem Index entfernen möchten, die nicht mehr im Arbeitsverzeichnis vorhanden sind (vielleicht weil Ihr Arbeitsverzeichnis schmutzig ist und Sie git commit -a nicht verwenden können), verwenden Sie den folgenden Befehl

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

SUBMODULES

Nur Submodule, die ein Gitfile verwenden (was bedeutet, dass sie mit einer Git-Version 1.7.8 oder neuer geklont wurden), werden aus dem Arbeitsverzeichnis entfernt, da ihr Repository im Verzeichnis .git des Superprojekts liegt. Wenn ein Submodul (oder eines der darin verschachtelten) noch ein .git-Verzeichnis verwendet, verschiebt git rm das Git-Verzeichnis des Submoduls in das Git-Verzeichnis des Superprojekts, um den Verlauf des Submoduls zu schützen. Falls vorhanden, wird auch der Abschnitt submodule.<name> in der Datei gitmodules[5] entfernt und diese Datei wird vorgemerkt (es sei denn, --cached oder -n werden verwendet).

Ein Submodul gilt als aktuell, wenn der HEAD derselbe ist wie im Index aufgezeichnet, keine verfolgten Dateien modifiziert sind und keine nicht verfolgten Dateien, die nicht ignoriert werden, im Arbeitsverzeichnis des Submoduls vorhanden sind. Ignorierte Dateien gelten als entbehrlich und hindern die Entfernung des Arbeitsverzeichnisses eines Submoduls nicht.

Wenn Sie nur den lokalen Checkout eines Submoduls aus Ihrem Arbeitsverzeichnis entfernen möchten, ohne die Entfernung zu committen, verwenden Sie stattdessen git-submodule[1] deinit. Siehe auch gitsubmodules[7] für Details zur Entfernung von Submodulen.

BEISPIELE

git rm Documentation/\*.txt

Entfernt alle *.txt-Dateien aus dem Index, die sich im Verzeichnis Documentation und in seinen Unterverzeichnissen befinden.

Beachten Sie, dass der Stern * in diesem Beispiel vom Shell zitiert wird; dies ermöglicht es Git und nicht der Shell, die Pfadnamen von Dateien und Unterverzeichnissen im Verzeichnis Documentation/ zu erweitern.

git rm -f git-*.sh

Da dieses Beispiel zulässt, dass die Shell den Stern erweitert (d. h. Sie listen die Dateien explizit auf), entfernt es nicht subdir/git-foo.sh.

BUGS

Jedes Mal, wenn ein Superprojekt-Update ein gefülltes Submodul entfernt (z. B. beim Wechseln zwischen Commits vor und nach der Entfernung), bleibt ein veralteter Submodul-Checkout am alten Ort zurück. Das Entfernen des alten Verzeichnisses ist nur sicher, wenn es ein Gitfile verwendet, da ansonsten der Verlauf des Submoduls ebenfalls gelöscht wird. Dieser Schritt wird obsolet, wenn die rekursive Submodul-Aktualisierung implementiert wurde.

SIEHE AUCH

GIT

Teil der git[1] Suite