1393 Stimmen

Entfernen mehrerer Dateien aus einem Git Repo, die bereits von der Festplatte gelöscht wurden

Ich habe ein Git-Repository, aus dem ich vier Dateien gelöscht habe, indem ich rm ( no git rm ), und mein Git-Status sieht folgendermaßen aus:

#    deleted:    file1.txt
#    deleted:    file2.txt
#    deleted:    file3.txt
#    deleted:    file4.txt

Wie entferne ich diese Dateien aus Git, ohne jede einzelne Datei manuell hinzufügen zu müssen?

git rm file1 file2 file3 file4

Idealerweise suche ich nach etwas, das genauso funktioniert wie die git add . tut, wenn das möglich ist.

3 Stimmen

12 Stimmen

@seth, es ist nicht immer bequem zu benutzen git rm Die Entfernung könnte mit einem anderen Tool, einer IDE oder einem Dateimanager erfolgt sein. Visual Studio zum Beispiel kann beim Entfernen/Umbenennen von Dateien eine Qual sein.

75 Stimmen

Igitt, zu fragen, warum jemand nicht die git rm ist ein bisschen wie die Frage, warum sie nicht git vim o git cd . Git sollte einen eingebauten Befehl oder Alias haben, um gelöschte Dateien aus dem Staging zu entfernen, und man sollte nicht in SO nachschlagen oder in der Mittagspause Manpages lesen müssen.

5voto

Xiong Chiamiov Punkte 12221

Wenn Sie nur gelöschte Dateien geändert haben, ist alles in Ordnung, aber ansonsten müssen Sie git-status ausführen und die Ausgabe analysieren.

In Anlehnung an die Antwort von Jeremy habe ich Folgendes herausgefunden:

git status |  sed -s "s/^.*deleted: //" | grep "\(\#\|commit\)" -v | xargs git rm
  1. Status der Dateien abfragen.
  2. Bei gelöschten Dateien ist der Name der Datei zu isolieren.
  3. Entfernen Sie alle Zeilen, die mit #s beginnen, sowie eine Statuszeile, die das Wort "deleted" enthielt; ich erinnere mich nicht mehr genau, was das war, und es ist nicht mehr da, also müssen Sie dies vielleicht für verschiedene Situationen abändern. Ich denke, dass die Gruppierung von Ausdrücken eine GNU-spezifische Funktion sein könnte, wenn Sie also nicht gnutils benutzen, müssen Sie vielleicht mehrere grep -v Zeilen.
  4. Übergeben Sie die Dateien an git rm .

Ich stecke das jetzt in ein Shell-Alias...

4voto

Chad Punkte 1215
git commit -m 'commit msg' $(git ls-files --deleted)

Das hat bei mir funktioniert, nachdem ich die Dateien bereits gelöscht hatte.

3voto

thomasrutter Punkte 109036

Sie können verwenden git add -u <filenames> um nur die gelöschten Dateien bereitzustellen.

Zum Beispiel, wenn Sie die Dateien templates/*.tpl , dann verwenden Sie git add -u templates/*.tpl .

El -u ist erforderlich, um auf Dateien zu verweisen, die im Repository, aber nicht mehr im Arbeitsverzeichnis vorhanden sind. Andernfalls wird der Standardwert von git add ist, die Dateien im Arbeitsverzeichnis zu suchen, und wenn Sie Dateien angeben, die Sie dort gelöscht haben, werden sie nicht gefunden.

3voto

Serdar Punkte 1328

Ich brauchte das gleiche und benutzte die Git-Gui-Schaltfläche "stage changed". es fügt auch alle.

Und nach "stage changed" habe ich "commit" gemacht ...

damit mein Arbeitsverzeichnis wieder sauber ist.

0 Stimmen

Nun, eine Benutzeroberfläche zu benutzen ist CHEATING, lol! Aber schneller in den Fällen, in denen der GUI-Designer Ihre Bedürfnisse abdeckt. Es ist gut zu wissen, wie man mit dem, was unter der Haube ist, umgeht.

1 Stimmen

Zu Ihrer Information: Diese Antwort wurde zusammengelegt von stackoverflow.com/questions/1402776/

2voto

urban Punkte 4872

(Eine weitere Variante)

Ich wollte alle bereits gelöschten Dateien auf der Festplatte löschen, aber nur aus einem bestimmten Ordner, während die anderen Ordner unberührt blieben. Das Folgende hat bei mir funktioniert:

git ls-files --deleted  | grep <folder-name> | xargs git rm

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X