2010-07-03 4 views
22

Als ich git status laufen, ich ein paar Zeilen der Form habenEntfernen Sie alle gelöschten Dateien aus in Git „geändert, aber nicht aktualisiert“

deleted: dir/file.js 

Ich kann mit git checkout -- dir/file.js jeden einzeln entfernen, aber es muss sei eine weniger sorgfältige Art, dies zu tun. (Und ja, ich weiß, ich sollte git rm in erster Linie verwendet haben ...)

[aktualisieren: Wie Mark Punkte unten aus, git checkout -- stellt tatsächlich eine gelöschte Datei, während ich gedacht hatte, dass sie gelöscht es aus dem Git-Index. Ich war ein wenig verwirrt, denn wenn man git status laufen, heißt es:

use "git checkout -- <file>..." to discard changes in working directory 

Für mich „Änderungen verwerfen“ bedeutet nicht „Wiederherstellung einer Datei, die Sie gelöscht haben,“ aber in git Terminologie Ich nehme an, das macht Sinn .]

+0

ich verstehe nicht. 'checkout' wird diese gelöschten Dateien wiederherstellen, aber Sie sagen, Sie hätten' git rm' an erster Stelle verwenden sollen, um die Dateien zu entfernen. Möchten Sie diese Dateien in Ihrem Arbeitsbaum wiederherstellen oder sie aus dem Index sowie aus Ihrem Arbeitsbaum entfernen? –

+0

Ich möchte sie auch aus dem Index entfernen, was 'git checkout - [Dateiname]' tut, während 'git checkout [Dateiname]' die Dateien wiederherstellt. –

+0

Das ist nicht richtig, ich fürchte - das '-' in 'git checkout - ' ist nur eine Möglichkeit, um sicherzustellen, dass '' als Pfad und nicht als Name einer Verzweigung (oder eines Tags) interpretiert wird oder ein Commit). Wenn '' nicht der Name einer Verzweigung (& c.) Ist, haben die beiden von Ihnen genannten Formulare denselben Effekt: Sie stellen die Datei im Index wieder her. –

Antwort

36

Wie rampion weist darauf hin, können Sie immer noch git rm verwenden, um die Löschung von Dateien auf der Bühne, die bereits in der Arbeitskopie gelöscht wurde (zB nur git rm dir/file.js in Ihrem Fall.) Wenn Sie haben eine Menge diese Dateien aufgelistet als „gelöscht“ unter „geändert, aber nicht aktualisiert“, würde ich zunächst prüfen, ob git ls-files --deleted eine Liste dieser Dateien erzeugt, und wenn ja, löschen sie sie mit:

git ls-files --deleted -z | xargs -0 git rm 
+0

Danke, das funktioniert perfekt! Ich werde es als Alias ​​verwenden müssen. –

+0

Wirklich hilfreich! – cool

1

Sie können nach der Tat noch git rm, aber wenn Sie möchten, alle geänderten Dateien wiederherstellen (einschließlich Löschungen) an der letzten Revision mit git reset --hard

+0

Ich habe ein Problem mit 'git push' hängen an einer großen Datei, die gelöscht wurde, gefolgt alle oben und mehr. Es wird in keinem Statusprotokoll angezeigt. Aber es hängt immer noch an einem Stoß. Würde deine Antwort das beheben, wenn ich mit einem 'git rm' fortfahre? – elliotrock

34

die Löschung Also, Sie begehen wollen diese Dateien? Dann nutzen

git add -u 
git commit 
+4

Dies ist die richtige Antwort – mko

+2

Nur um zu verdeutlichen, warum ich die Antwort, die ich hinzugefügt habe, bevorzuge, ist das Problem mit 'git add -u' in diesem Fall, dass es auch andere Änderungen an verfolgten Dateien im Repository, anstatt nur die Streichungen. –

+0

'Rejected Edit from Dialogik:' (Beachten Sie, dass dadurch auch alle anderen Änderungen an den reporten Dateien im Repository durchgeführt werden und nicht nur die Löschungen - siehe Kommentare unten.) –

Verwandte Themen