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.

98voto

Saeb Amini Punkte 20943

Zur Bühne nur die gelöschten Dateien:

for x in $(git status | grep deleted | awk '{print $2}'); do git rm $x; done

Oder (auf die xargs-Art):

git status | awk '/deleted/ {print $2}' | xargs git rm

Puedes alias Ihren bevorzugten Befehlssatz zur späteren Verwendung.

2 Stimmen

@Saeb Verständnis für die Warteschlange, aber xargs ist in etwa 15 Minuten zu bewältigen.

11 Stimmen

git status | awk '/deleted/ {print $3}' | xargs git rm wäre ein kürzerer Weg, dies zu tun. grep | awk ... Sag einfach nein.

62 Stimmen

git rm $(git ls-files --deleted) ist das nicht praktischer (kopiert von ce ).

65voto

Peaker Punkte 2284
git rm test.txt

Bevor oder nachdem Sie die eigentliche Datei gelöscht haben.

7 Stimmen

Das funktioniert zwar, aber ich lösche oft eine Menge Dateien, indem ich einfach rm und es später zu bereuen.

4 Stimmen

Warum ist das schlimmer als git add -u ? Es scheint sicherer zu sein, die spezifischen Dateien, die gelöscht wurden, der Übergabe hinzuzufügen, als ALLE Änderungen.

2 Stimmen

Eigentlich sollte dies die beste Antwort sein, gemäß der letzten Zeile der Frage "Ich möchte nur einen Befehl, der alle Dateien aus git löscht, die auch von der Festplatte gelöscht werden."

50voto

zobie Punkte 609

Wenn Sie git-add mit den Optionen '--all' oder '--update' verwenden, erhalten Sie möglicherweise mehr als Sie wollten. Neue und/oder geänderte Dateien werden ebenfalls in den Index aufgenommen. Ich habe einen Bash-Alias für den Fall eingerichtet, dass ich gelöschte Dateien aus Git entfernen möchte, ohne andere Dateien zu berühren:

alias grma='git ls-files --deleted -z | xargs -0 git rm'

Alle Dateien, die aus dem Dateisystem entfernt wurden, werden als gelöscht in den Index aufgenommen.

41voto

Stephan Tual Punkte 2587

Nicht dass es wirklich wichtig wäre, aber ich bin mit der gewählten Antwort nicht einverstanden:

git add -u 

... wird Dateien aus dem Index entfernen, wenn die entsprechenden Dateien im Arbeitsbaum entfernt wurden, aber es wird auch die geänderten neuen Inhalte der verfolgten Dateien bereitstellen.

git rm $(git ls-files --deleted)

... andererseits werden nur die gelöschten Dateien, die verfolgt wurden, wiederhergestellt.

Letzteres ist also meiner Meinung nach die bessere Option.

31voto

SpoonMeiser Punkte 19191

Wenn dies die einzigen Änderungen sind, können Sie einfach Folgendes tun

git commit -a

um alle Änderungen zu übernehmen. Dies gilt auch für gelöschte Dateien.

3 Stimmen

Ich bin mir nicht sicher, warum ich heruntergestuft wurde; Git ist gut darin, gelöschte Dateien zu identifizieren, auch wenn man es nicht explizit mit git rm mitgeteilt hat.

0 Stimmen

Sie wurden heruntergestuft, weil "-a" kein akzeptabler Schalter ist, sondern "-A". Ändern Sie Ihre Antwort.

11 Stimmen

Nein, "-a" ist ein akzeptabler Schalter, denn der Befehl ist übergeben. . "-A" ist ein Schalter für hinzufügen. aber nicht übergeben. . Wie ich sehe, ist Ihr Änderungsvorschlag bereits abgelehnt worden.

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