it-swarm.com.de

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 ändere mehrere Dateien, öffne Git und füge diese Dateien mit "git add" zu meinem Staging-Bereich hinzu.

Frage: Wie entferne ich eine dieser Dateien aus dem Staging-Bereich, aber nicht aus dem Index oder mache die Änderungen an der Datei selbst rückgängig?

1146
PHLAK

Wenn ich die Frage richtig verstehe, möchten Sie einfach den _git add_ "rückgängig machen", der für diese Datei durchgeführt wurde.

Wenn Sie eine einzelne Datei aus dem Staging-Bereich entfernen müssen, verwenden Sie

_git reset HEAD -- <file>_

Wenn Sie ein gesamtes Verzeichnis (Ordner) aus dem Staging-Bereich entfernen müssen, verwenden Sie

_git reset HEAD -- <directoryName>_

Ihre Änderungen werden beibehalten. Wenn Sie _git status_ ausführen, wird die Datei erneut als geändert, aber noch nicht bereitgestellt angezeigt.

Weitere Informationen finden Sie auf der Manpage git reset .

1777
Tim Henigan
git rm --cached FILE

,

git rm -r --cached CVS */CVS
146
user335425

git reset <file>

Funktioniert unabhängig davon, ob Sie bereits Commits ausgeführt haben oder nicht.

85
MTS

Also, eine kleine Änderung an Tim Henigans Antwort: Sie müssen - vor dem Dateinamen verwenden. Es würde so aussehen:

git reset HEAD -- <file>
53
GuerillaNerd
git reset filename.txt

Wenn Sie eine Änderung in der Datei "filename.txt" vorgenommen haben, haben Sie sie versehentlich hinzugefügt, und Sie möchten die Datei aus dem Staging entfernen, aber die Änderungen nicht verlieren.

15
Vlad Cioaba

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

git reset -p

oder

git reset -p <file_name>

Dieser Befehl ist im Grunde die Umkehrung von git add -p: Er entfernt nur die ausgewählten Änderungen aus dem Staging-Bereich. Ich finde es äußerst nützlich, wenn ich etwas, das ich versehentlich hinzugefügt habe, "nicht hinzufüge".

6
fede1024

Wenn Sie Dateien nach einem bestimmten Muster entfernen möchten und git rm --cached verwenden, können Sie auch File-Glob-Muster verwenden.

Siehe hier .

4
thilinarmtb

Wenn Sie git status ausführen, sagt Git Ihnen, wie Sie die Bühne verlassen müssen:

Changes to be committed: (use "git reset HEAD <file>..." to unstage).

Also hat git reset HEAD <file> für mich gearbeitet und die Änderungen waren unberührt.

2
user4299998

Sie wollen:

  • Betrifft eine einzelne Datei

  • Datei aus dem Staging-Bereich entfernen

  • Einzelne Datei nicht aus dem Index entfernen

  • Machen Sie die Änderung nicht rückgängig

und die lösung ist

git reset HEAD file_name.ext

oder

git reset HEAD path/to/file/file_name.ext
2
D Vy

Wenn Sie Änderungen an vielen nachverfolgten Dateien vornehmen, aber nur einige davon bereitstellen möchten, führen Sie einen

git add .

dies ist nicht immer günstig (oder wird empfohlen), da alle nachverfolgten Dateien bereitgestellt werden (in einigen Fällen möchten Sie Änderungen nur für sich selbst und nicht für das Remote-Repository bereitstellen).

noch ist es ideal, ein paar zu tun

git add path/to/file1 path/to/file2

wenn Sie viele verschachtelte Verzeichnisse haben (was bei den meisten Projekten der Fall ist), wird dies ärgerlich

Das ist, wenn Git GUI hilfreich ist (wahrscheinlich nur, wenn ich es benutze). Öffnen Sie einfach die Git-GUI und es werden die bereitgestellten und nicht bereitgestellten Dateibereiche angezeigt. Wählen Sie die Dateien aus dem bereitgestellten Bereich aus, die Sie aus der Bühne entfernen möchten, und drücken Sie

Ctrl+U (für Windows)

um sie aus der Bühne zu bringen.

1
rite2hhh

Ich denke, Sie wurden wahrscheinlich mit dem Konzept vonindexverwechselt, als @ CB Bailey kommentierte:

Der Staging-Bereich ist der Index.

Sie können einfachStaging-Verzeichnisundindexals dasselbe betrachten.
Also, genau wie @ Tim Henigans Antwort , denke ich:

sie möchten einfach den git add "rückgängig machen", der für diese Datei ausgeführt wurde.



Hier ist meine Antwort:

Im Allgemeinen gibt es zwei Möglichkeiten, einestage-Operation rückgängig zu machen, wie bereits erwähnt:

git reset HEAD <file>

und

git rm --cached <file>

Aber was ist der Unterschied?

Angenommen, die Datei wurdeinszeniertund ist im Verzeichnisworking directoryvorhanden, verwenden Sie git rm --cached <file>, wenn Sie möchten um es aus demStaging-Verzeichniszu entfernen und die Datei imArbeitsverzeichniszu behalten. Beachten Sie jedoch, dass diese Operation nicht nur die Datei aus dem Verzeichnisstagingentfernt, sondern die Datei auch als deleted instaging markiert Verzeichnis, wenn Sie verwenden

git status

nach dieser Operation sehen Sie Folgendes:

        deleted:    <file>

Es ist ein Protokoll zum Entfernen der Datei ausStaging-Verzeichnis. Wenn Sie diese Aufzeichnung nicht beibehalten und nur einen Vorgang einer Datei in der vorherigen Phase rückgängig machen möchten, verwenden Sie stattdessen git reset HEAD <file>.


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

PS: Ich habe einige Antworten erwähnt:

git checkout -- <file>

Dieser Befehl ist für den Fall vorgesehen, dass die Dateiinszeniertwar, die Datei jedoch inArbeitsverzeichnisgeändert wurde. Verwenden Sie diese Operation, um die Datei nach dem Staging im Verzeichnisworking directoryvonstaging directorywiederherzustellen. Mit anderen Worten, nach diesem Vorgang werden Änderungen in IhremArbeitsverzeichnisvorgenommen, NICHT in IhremStaging-Verzeichnis.

0
Wulfric Lee