Situation: Ich habe ein Git-Repository mit Dateien, die bereits im Index enthalten sind. Ich ändere mehrere Dateien, öffne Git und füge diese Dateien mit "git add" 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?
git
version-control
staging
PHLAK
quelle
quelle
Antworten:
Wenn ich die Frage richtig verstehe, möchten Sie einfach das rückgängig machen
git add
, was für diese Datei gemacht wurde.Wenn Sie eine einzelne Datei aus dem Staging-Bereich entfernen müssen , verwenden Sie
git reset HEAD -- <file>
Wenn Sie ein ganzes Verzeichnis (Ordner) aus dem Staging-Bereich entfernen müssen , verwenden Sie
git reset HEAD -- <directoryName>
Ihre Änderungen werden beibehalten. Wenn Sie
git status
die Datei ausführen , wird sie erneut als geändert, aber noch nicht bereitgestellt angezeigt.Weitere Informationen finden Sie in der
git reset
Manpage .quelle
git rm --cached FILE
wie in einer anderen Antwort vorgeschlagen.,
quelle
git reset
hier zu verwenden , denke ich, da Sie die Option --chached möglicherweise weglassen und mit demgit rm
Befehl schnell traurig werden :-)git reset
Wenn Sie auf der sicheren Seite sind und vergessen, "eine Option" hinzuzufügen, wird dies der Fall sein Bewahren Sie das Wechselgeld so auf, dass es für den täglichen Gebrauch "sicherer" ist (ich spreche davongit reset --hard
).git rm --cached FILE
Stuft das Löschen von Dateien ein, ohne die Datei aus dem Arbeitsbaum zu löschen. Dies ist anders als die Frage, bei der es um das Rückgängigmachen ginggit add
.git rm --cached
wird dazu führen , dh die Datei aus dem Index entfernt wird, wird die Datei wird untracked Datei. Ich glaube nicht, dass OP das will. Bitte sehen Sie einen verwandten Thread hier: stackoverflow.com/questions/45047810/…git reset <file>
Funktioniert unabhängig davon, ob Sie bereits Commits durchgeführt haben oder nicht.
quelle
Also eine kleine Änderung an Tim Henigans Antwort: Sie müssen - vor dem Dateinamen - verwenden. Es würde so aussehen:
quelle
--
und warum hinzufügen? Ich habegit reset HEAD <file>
es getan und es hat funktioniert.--
ist eine Art Teiler. Falls der Dateiname unkonventionell ist, würde zB (-f
odermaster
) git ihn als Befehlszeilenargument oder Verzweigungsname anstelle des Dateinamens interpretieren. Siehe hierWenn Sie eine Änderung in filename.txt haben, haben Sie diese versehentlich zur Stufe hinzugefügt und möchten die Datei aus dem Staging entfernen, aber die Änderungen nicht verlieren.
quelle
Wenn Sie nur eine Teilmenge der Änderungen an Ihrer Datei entfernen möchten, können Sie Folgendes verwenden:
oder
Dieser Befehl ist im Grunde das Gegenteil von
git add -p
: Er entfernt nur die ausgewählten Änderungen aus dem Staging-Bereich. Ich finde es äußerst nützlich, etwas, das ich versehentlich hinzugefügt habe, zu "entfernen".quelle
Wenn Sie Dateien entfernen möchten, die einem bestimmten Muster folgen und das Sie verwenden
git rm --cached
, können Sie auch File-Glob-Muster verwenden.Siehe hier .
quelle
Sie wollen:
Auswirkungen auf eine einzelne Datei
Datei aus dem Staging-Bereich entfernen
Entfernen Sie keine einzelne Datei aus dem Index
Machen Sie die Änderung selbst nicht rückgängig
und die Lösung ist
oder
quelle
Wenn Sie dies tun
git status
, erklärt Git Ihnen, wie Sie die Bühne verlassen können:Also
git reset HEAD <file>
für mich gearbeitet und die Änderungen waren unberührt.quelle
Ich denke, Sie wurden wahrscheinlich mit dem Konzept des Index verwechselt , wie @CB Bailey kommentierte:
Sie können Staging-Verzeichnis und -Index einfach als dasselbe betrachten.
Also, genau wie die Antwort von @Tim Henigan , denke ich:
Hier ist meine Antwort:
Üblicherweise gibt es zwei Möglichkeiten , um eine rückgängig zu machen Stufe Betrieb, wie andere Antworten bereits erwähnt:
und
Aber was ist der Unterschied?
Angenommen, die Datei wurde bereitgestellt und befindet sich auch im Arbeitsverzeichnis . Verwenden
git rm --cached <file>
Sie diese Option, wenn Sie sie aus dem Bereitstellungsverzeichnis entfernen möchten , und behalten Sie die Datei im Arbeitsverzeichnis . Beachten Sie aber , dass dieser Vorgang wird nicht nur die Datei aus entfernen Staging - Verzeichnis , sondern markiert auch die Datei alsdeleted
in Verzeichnis staging , wenn Sie verwendenNach dieser Operation sehen Sie Folgendes:
Es ist eine Aufzeichnung des Entfernens der Datei aus dem Staging-Verzeichnis . Wenn Sie diese Aufzeichnung nicht aufbewahren und einfach einen Vorgang einer Datei in der vorherigen Phase rückgängig machen möchten, verwenden Sie
git reset HEAD <file>
stattdessen.-------- ENDE DER ANTWORT --------
PS: Ich habe einige Antworten bemerkt, die erwähnt wurden:
git checkout -- <file>
Dieser Befehl gilt für Situationen, in denen die Datei bereitgestellt wurde, die Datei jedoch nach dem Bereitstellen im Arbeitsverzeichnis geändert wurde. Verwenden Sie diesen Vorgang, um die Datei im Arbeitsverzeichnis aus dem Bereitstellungsverzeichnis wiederherzustellen . Mit anderen Worten, nach diesem Vorgang treten Änderungen in Ihrem Arbeitsverzeichnis auf , NICHT in Ihrem Staging-Verzeichnis .
quelle
Nach der Version
2.23
hat Git dengit restore
Befehl eingeführt, mit dem Sie dies tun können. Zitieren der offiziellen Dokumentation:So können
git restore --staged <path>
Sie die Datei aufrufen und entfernen, aber auch die vorgenommenen Änderungen beibehalten. Denken Sie daran, dass Sie alle Änderungen verlieren, die Sie daran vorgenommen haben, wenn die Datei nicht bereitgestellt wurde.quelle
Wenn Sie Änderungen an vielen nachverfolgten Dateien vornehmen, aber nur einige davon bereitstellen möchten, führen Sie a
git add .
ist nicht immer günstig (oder 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 in den meisten Projekten der Fall ist), wird dies ärgerlich
Dann ist Git GUI hilfreich (wahrscheinlich nur, wenn ich es benutze). Öffnen Sie einfach die Git-GUI. Es werden abgestufte und nicht bereitgestellte Dateibereiche angezeigt. Wählen Sie die Dateien aus dem bereitgestellten Bereich aus, die Sie entfernen möchten, und drücken Sie
sie zu inszenieren.
quelle
Für neuere Versionen von Git gibt es
git restore --staged <file>
.Wenn ich eine
git status
Version mit Git mache2.26.2.windows.1
, wird dies auch zum Aufheben der Staging-Funktion empfohlen:( Dieser Beitrag zeigt, dass in früheren Versionen
git reset HEAD
an dieser Stelle empfohlen wurde)Ich kann empfehlen , diese Post , die Unterschiede zwischen erklären
git revert
,git restore
undgit reset
auch zusätzliche Parameter fürgit restore
.quelle
Mein Beispiel:
Wie Sie vielleicht bemerken
quelle
Sie müssen sich im Verzeichnis der Datei befinden und dann Folgendes in das Terminal eingeben
Es wird davon ausgegangen, dass Sie nur eine Datei zurücksetzen müssen.
quelle
Führen Sie diesen Befehl aus, um alles auf einmal zu entfernen
quelle
git checkout -- <file>
Es funktioniert perfekt, um Dateien aus dem Staging-Bereich zu entfernen
quelle
In meinem Fall tue ich das
quelle