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?
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
.
git rm --cached FILE
,
git rm -r --cached CVS */CVS
git reset <file>
Funktioniert unabhängig davon, ob Sie bereits Commits ausgeführt haben oder nicht.
Also, eine kleine Änderung an Tim Henigans Antwort: Sie müssen - vor dem Dateinamen verwenden. Es würde so aussehen:
git reset HEAD -- <file>
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.
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".
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 .
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.
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
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.
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.