Warum 'git rm' verwenden, um eine Datei anstelle von 'rm' zu entfernen?

171

Unter SVN verursachte das direkte Entfernen von Elementen aus dem Dateisystem (anstatt svn zu verwenden) eine Menge Kopfschmerzen.

Ich habe nicht festgestellt, dass dies ein Problem bei der Verwendung ist git, aber ich stelle fest, dass Git eine eigene rmImplementierung hat (git rm ).

Was ist der Unterschied zwischen rmund git rm?

cjm2671
quelle

Antworten:

253

Wenn Sie nur verwenden rm, müssen Sie es mit verfolgen git add <fileRemoved>. git rmmacht dies in einem Schritt.

Sie können auch verwenden git rm --cached, um die Datei aus dem Index zu entfernen (zum Löschen beim nächsten Festschreiben bereitzustellen), aber Ihre Kopie im lokalen Dateisystem aufbewahren.

Andy
quelle
Gute Antwort. Ich konnte den git reset --hardMaster verwenden und dann auschecken, um aus dem Zustand des losgelösten Kopfes herauszukommen, da ich wusste, dass ich keine nicht festgeschriebenen Änderungen hatte. Wenn Sie Ihre Änderungen nicht festgeschrieben haben, möchten Sie vielleicht einen Git-Stash durchführen, aber ich bin relativ neu in Git, daher kenne ich den genauen Befehl nicht. Wenn Sie in oder nach 2014 hierher gekommen sind, hoffe ich, dass diese Antwort für Sie nützlich war.
Eric Hepperle - CodeSlayer2010
@Andy - Wenn ich rm(anstelle git rm) viele Dateien verwendet und gelöscht habe und diese jetzt nicht gitmehr verfolgen möchte . Gibt es eine Möglichkeit, Änderungen rückgängig zu machen? Ich möchte gitmeine rmals entfernt betreten , da ich sie überhaupt nicht benutzt habe git rm.
Chetan Arvind Patil
Es wäre schön, wenn dies in den Online-Dokumenten klar formuliert wäre (es könnte vorhanden sein, aber es ist offensichtlich nicht offensichtlich, oder diese Frage wäre nicht gestellt worden). Es wäre schön für Benutzer zu wissen, dass sie nichts falsch machen, wenn sie den OS-Rm-Weg gehen. Und es gibt Gründe, sich für das Betriebssystem zu entscheiden. Wenn Sie beispielsweise eine Datei löschen müssen, um zu testen, ob etwas funktioniert, bevor Sie die Änderung vornehmen, ist die Betriebssystemroute etwas sicherer als die Verwendung von git rm, da Sie im git-Fall die Aktion aufheben müssen, während Sie dies bei der Betriebssystemoption nur tun zu holen (glaube ich).
Bob
12

Das Entfernen von Dateien mit rmist per se kein Problem, aber wenn Sie dann festlegen möchten, dass die Datei entfernt wurde, müssen Sie git rmtrotzdem eine ausführen, sodass Sie dies genauso gut von Anfang an tun können.

Abhängig von Ihrer Shell erhalten Sie git rmnach dem Löschen der Datei keine Tab-Vervollständigung, sodass Sie den Pfad selbst buchstabieren müssen. Wenn git rmdie Datei noch vorhanden ist, funktioniert die Tab-Vervollständigung wie gewohnt.

Hammar
quelle
7

git rmentfernt die Datei aus dem Index und dem Arbeitsverzeichnis (nur Index, wenn Sie sie verwendet haben --cached), damit das Löschen für das nächste Festschreiben bereitgestellt wird.

Manojlds
quelle
4

Wenn Sie jedoch am Ende rm anstelle von git rm verwenden. Sie können das Hinzufügen von Git überspringen und die Änderungen direkt festschreiben, indem Sie:

git commit -a

Kämpfer
quelle
3

Entfernen Sie Dateien aus dem Index oder aus dem Arbeitsbaum und dem Index. git rm entfernt eine Datei nicht nur aus Ihrem Arbeitsverzeichnis.

So können Sie eine Datei mit löschen rm -fund dann mit aus Ihrem Index entfernengit rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

Sie können dies jedoch alles auf einmal mit nur einem tun git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html
basicxman
quelle
2

Wenn Sie git rm verwenden, ist das Entfernen Teil Ihres nächsten Commits. Wenn Sie also die Änderung vorantreiben möchten, sollten Sie git rm verwenden

keis
quelle
2

Zusätzlich zu Andys Antwort gibt es einen zusätzlichen Nutzen für git rm:

  1. Sicherheit : Wenn Sie dies git rmstattdessen tun rm, blockiert Git das Entfernen, wenn eine Diskrepanz zwischen der HEADVersion einer Datei und dem Staging-Index oder der Arbeitsbaumversion besteht. Dieser Block ist ein Sicherheitsmechanismus , um das Entfernen laufender Änderungen zu verhindern.

  2. Schutz : git rm --dry-run. Diese Option ist ein Schutz, der den git rmBefehl ausführt, die Dateien jedoch nicht löscht. Stattdessen wird ausgegeben, welche Dateien entfernt worden wären.

Joe
quelle