2010-04-19 7 views
7

Wenn Sie Git über die Befehlszeile verwenden, gibt es eine Möglichkeit, alle zu löschenden Dateien in der Liste "Geändert, aber nicht aktualisiert" auf einen Schlag zu löschen? Anstatt manuelle Löschungen mithilfe von Platzhaltern durchzuführen.Git - rm gleichwertig für "add."?

+0

Beachten Sie, dass "git commit -a" alle überwachten Dateien, die entfernt wurden, auch beim Commit entfernt hat. Nur zu deiner Information. –

+0

'git commit -a' fügt nur Dateien hinzu - das ist es, was die meisten Leute, einschließlich mir selbst, benutzt haben. Die Antwort lautet: git commit -A. Es werden Elemente, die hinzugefügt werden sollen, und Bühnenelemente gleichzeitig gelöscht! Siehe Sujoy's Antwort unten. –

Antwort

3

Dateien, die im Status "Geändert, aber nicht aktualisiert" des Status als gelöscht angezeigt werden, werden aus dem Arbeitsbaum, jedoch nicht aus dem Index gelöscht. Um das Löschen im Index Stufe (dh entfernen Sie die Datei aus dem Index) Sie tun können:

git diff -z --name-only --diff-filter=D | git update-index --remove -z --stdin 

--diff-filter=D zeigt nur die Unterschiede zu dem Index, die Dateien gelöscht werden, druckt --name-only nur ihren Namen und -z verwendet NUL separate Dateinamen, damit Sie sich keine Gedanken über Dateinamen mit eingebetteten Zeilenumbrüchen machen müssen. update-index entfernt dann die angegebenen Dateien aus dem Index.

Wenn Sie eine Version von xargs die -0 unterstützt, dann können Sie das leicht tun einfacher:

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

Danke, das hat funktioniert. – Steve

4

Nun, die Dateien unter Geändert, aber nicht aktualisiert sind bereits im Index. Sie können ihre Änderungen verwerfen, indem Sie git checkout .
verwenden Zum Entfernen von Dateien, die neu sind, aber nicht zum Index hinzugefügt wurden, können Sie git clean verwenden.
Aber zum Löschen von Dateien, die geändert werden und im Index ... Nun, es gibt keine einfache Lösung, müssen Sie wahrscheinlich eine Kombination von git rm und git ls-files verwenden.

EDIT:
git ls-files -m Liste der Dateien sollten Sie suchen. Kombinieren Sie es mit git rm und Sie sind fertig:

git-ls files -m | xargs git rm // NOT TESTED 

EDIT:
ich wahrscheinlich einen Teil Ihrer Frage falsch verstanden. Meine Lösung löscht alle unter aufgelisteten Dateien Geändert, aber nicht aktualisiert. Wenn Sie die Dateien löschen wollen, die als gelöscht aufgelistet sind, müssen Sie git diff verwenden, wie Charles Bailey in seiner Antwort zeigt.

+0

Danke. Wie würdest du kombinieren? git rm Steve

+0

'git ls-files -m' listet alle modifizierten Dateien auf, nicht nur gelöschte Dateien. Ich glaube nicht, dass Sie alle geänderten Dateien löschen möchten, nur die, die aus dem Arbeitsbaum gelöscht wurden. –

+0

@Charles: Ja, du hast recht - und so habe ich die Frage verstanden. Aber Sie haben wahrscheinlich Recht und das ist nicht, was das OP will ... bekam meine +1 für das Abholen – tanascius

8

Folgendes sollte alle Dateien Bühne, ob gelöscht oder nicht, in den Index:

git add -A 
+1

Dies ist die schnelle Antwort, ich bin sicher, dass jeder sucht. –