1464 Stimmen

Wie entferne ich eine einzelne Datei aus dem Staging-Bereich (undo git add)?

Situation: Ich habe ein Git-Repository mit Dateien, die sich bereits im Index befinden. Ich nehme Änderungen an mehreren Dateien vor, öffne Git und füge diese Dateien mit "git add" zu meinem Staging-Bereich hinzu.

Frage: Wie kann ich eine dieser Dateien aus dem Staging-Bereich entfernen, ohne sie aus dem Index zu entfernen oder die Änderungen an der Datei selbst rückgängig zu machen?

47 Stimmen

Der Bereitstellungsraum es den Index, vielleicht könnten Sie also klarstellen, was Sie genau meinen?

0 Stimmen

25voto

Vlad Cioaba Punkte 288
git reset filename.txt

Wenn Sie eine Änderung in der Datei filename.txt haben, die Sie versehentlich zu stage hinzugefügt haben, und Sie die Datei aus staging entfernen möchten, aber die Änderungen nicht verlieren wollen.

7voto

fede1024 Punkte 3029

Wenn Sie nur eine Teilmenge der Änderungen an Ihrer Datei entfernen möchten, können Sie dies tun:

git reset -p

o

git reset -p <file_name>

Dieser Befehl ist im Grunde das Gegenteil von git add -p : Es werden nur die ausgewählten Änderungen aus dem Staging-Bereich entfernt. Ich finde es äußerst nützlich, wenn ich etwas, das ich versehentlich hinzugefügt habe, wieder zurücknehmen möchte.

7voto

Mike Punkte 606

Nach der Version 2.23 hat Git die Funktion git restore Befehl, den Sie dazu verwenden können. Ich zitiere die offizielle Dokumentation:

Wiederherstellen angegebener Pfade im Arbeitsbaum mit einigen Inhalten aus einer Quelle wiederherstellen. Wenn ein Pfad verfolgt wird, aber nicht in der Wiederherstellungsquelle existiert Quelle nicht existiert, wird er entfernt, um mit der Quelle übereinzustimmen.

Der Befehl kann auch verwendet werden, um den Inhalt des Indexes wiederherzustellen mit --staged oder stellen Sie sowohl den Arbeitsbaum als auch den Index mit --staged --worktree .

Sie können also Folgendes aufrufen git restore --staged <path> und heben Sie die Datei auf, behalten Sie aber auch die von Ihnen vorgenommenen Änderungen bei. Denken Sie daran, dass alle Änderungen, die Sie an der Datei vorgenommen haben, verloren gehen, wenn die Datei nicht bereitgestellt wurde.

7voto

Kyung Lee Punkte 888

Ich glaube, Sie sind wahrscheinlich mit dem Konzept der Index als @CB Bailey kommentiert:

Der Aufenthaltsbereich ist der Index.

Sie können einfach überlegen Inszenierungsverzeichnis et Index als das Gleiche.
Also, genau wie @Tim Henigans Antwort denke ich:

Sie wollen einfach den Vorgang "rückgängig" machen git add die für diese Datei durchgeführt wurde.

Hier ist meine Antwort:

In der Regel gibt es zwei Möglichkeiten, einen Vorgang rückgängig zu machen Bühne Betrieb, wie bereits in anderen Antworten erwähnt:

git reset HEAD <file>

et

git rm --cached <file>

Aber worin besteht der Unterschied?

Angenommen, die Datei wurde inszeniert und existiert in Arbeitsverzeichnis auch verwenden git rm --cached <file> wenn Sie es aus Inszenierungsverzeichnis und speichern Sie die Datei in Arbeitsverzeichnis . Beachten Sie jedoch, dass dieser Vorgang die Datei nicht nur aus dem Inszenierungsverzeichnis sondern markieren Sie die Datei auch als deleted en Inszenierungsverzeichnis , wenn Sie

git status

Nach diesem Vorgang sehen Sie dies:

        deleted:    <file>

Es ist eine Aufzeichnung des Entfernens der Datei aus Inszenierungsverzeichnis . Wenn Sie diesen Datensatz nicht aufbewahren wollen und einfach nur einen früheren Arbeitsschritt einer Datei rückgängig machen wollen, verwenden Sie git reset HEAD <file> ではなく

-------- ENDE DER ANTWORT --------

PS: Ich habe einige der erwähnten Antworten bemerkt:

git checkout -- <file>

Dieser Befehl ist für den Fall gedacht, dass die Datei inszeniert , aber die Datei wurde geändert in Arbeitsverzeichnis nachdem sie bereitgestellt wurde, verwenden Sie diesen Vorgang, um die Datei in Arbeitsverzeichnis de Inszenierungsverzeichnis . Mit anderen Worten, nach dieser Operation gibt es Veränderungen in Ihrem Arbeitsverzeichnis , NICHT Ihr Inszenierungsverzeichnis .

4voto

thilinarmtb Punkte 229

Wenn Sie Dateien entfernen möchten, die einem bestimmten Muster folgen, und Sie verwenden git rm --cached können Sie auch Dateiglobusmuster verwenden.

参照 aquí .

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