Wie entferne ich Dateien aus dem Git-Staging-Bereich?

549

Ich habe einige meiner Dateien in meinem lokalen Repo geändert und dann, wie git add -Aich glaube, zu viele Dateien zum Staging-Bereich hinzugefügt. Wie kann ich alle Dateien aus dem Staging-Bereich löschen?

Nachdem ich das getan habe, mache ich es einfach manuell git add "filename".

Omega
quelle
2
Hoffentlich suchen Sie dies: stackoverflow.com/questions/1505948/…
sumitb.mdi
27
git statussagt Ihnen bereits genau, was zu tun ist, wenn Sie Dateien entfernen möchten.
Michael Foukarakis
6
@ MichaelFoukarakis Git-Status ist nicht so hilfreich, wenn Sie ein ganzes Verzeichnis entfernen möchten, wenn es das Terminal mit Ausgabe (wie node_modules)
überflutet
2
Anstatt in Zukunft alle hinzuzufügen, möchten Sie sich vielleicht mit git add -poder vertraut machen git add --patch(sie sind gleich). Mit diesem Flag können Sie interaktiv auswählen, welche Dateien oder einzelnen Änderungen Sie bereitstellen möchten. Anschließend können Sie die Arbeit, die Sie in das Commit aufnehmen, genauer bestimmen.
Gabe

Antworten:

690

Sie können Dateien aus dem Index entfernen, indem Sie

git reset HEAD -- path/to/file

Genauso wie git addSie Dateien rekursiv nach Verzeichnis usw. entfernen können. Um alles auf einmal zu entfernen, führen Sie dies aus dem Stammverzeichnis Ihres Repositorys aus:

git reset HEAD -- .

git statusZur späteren Bezugnahme werden Ihnen in der Ausgabe von die Befehle angezeigt, die Sie ausführen müssen, um Dateien von einem Status in einen anderen zu verschieben.

Ash Wilson
quelle
5
$ git reset HEAD -- .produziert fatal: Failed to resolve 'HEAD' as a valid ref.Beachten Sie, dass ich nie ein Commit gemacht habe; Es ist das erste git addnachgit init
Patrizio Bertoni
5
Sie können auch verwenden git reset @.
Alex
@alex Ist es besser als einfach nur git reset?
Antony Hatchkins
7
@AntonyHatchkins @ist gleichbedeutend mit HEAD.
Alex
Total für mich gearbeitet, danke!
Wayneseymour
305

Verwenden

git reset

alle inszenierten Dateien zu entfernen.

Antony Hatchkins
quelle
3
Kann ich fragen, wie sich dies unterscheidet, git reset HEAD --oder ist es einfach eine prägnantere Art, dieselbe Operation auszuführen?
ProNotion
1
@ProNotion Reset HEADwird standardmäßig verwendet. Was ist der Zweck von denen --in Ihrem git reset HEAD --?
Antony Hatchkins
@AntonyHatchkins Es sollte ein Punkt (Punkt) folgen, der dem Beispiel in der akzeptierten Antwort entnommen wurde.
ProNotion
11
@ProNotion Entschuldigung, ich habe dich missverstanden. git reset HEAD -- .unterscheidet sich darin, dass nur Dateien im aktuellen Verzeichnis und darunter zurückgesetzt werden, während git resetalle Dateien im Projekt zurückgesetzt werden.
Antony Hatchkins
101

Wenn Sie bereits eine Reihe unerwünschter Dateien festgeschrieben haben, können Sie sie entfernen und git anweisen , sie als gelöscht zu markieren (ohne sie tatsächlich zu löschen)

git rm --cached -r .

--cachedWeist es an, die Pfade aus dem Staging und dem Index zu entfernen, ohne die Dateien selbst zu entfernen, und verarbeitet -rVerzeichnisse rekursiv. Sie können dann git addalle Dateien, die Sie verfolgen möchten.

Max
quelle
Ich nehme an, es ist "git rm -".
Alexander Mills
1
Es gibt einen schwerwiegenden Fehler, wenn Dateien mit "git rm -" nicht entfernt werden.
Alexander Mills
@AlexMills Ich aktualisiere meine Antwort, um die tatsächlichen Optionen rmzum Aufheben der Bereitstellung aller Dateien zu erwähnen.
Max
2
Ich habe dies an einer einzelnen Datei wie dieser versucht: "git rm --cached my / file.java" und ich sehe diese Datei immer noch im Staging-Bereich, aber als gelöscht! @Max Wenn Sie diesen Befehl ausführen, werden Ihre Dateien tatsächlich gelöscht oder nur nicht bereitgestellt? Wenn Sie nicht nach diesem Verhalten suchen, würde ich mit Antwort gehen.
OrwellHindenberg
@OrwellHindenberg danke für den Hinweis! --cachedist wirklich zu stoppen, Dateien zu verfolgen, die Sie bereits festgeschrieben haben. Die Datei wird also nicht wirklich gelöscht, aber Git glaubt, dass dies der Fall ist. Ich habe dies in meiner Antwort klargestellt.
Max
30

Du könntest benutzen

git reset HEAD

Fügen Sie dann die gewünschten Dateien hinzu

git add [directory/]filename
Shad
quelle
Sie können den Parameter -x hinzufügen und ignorierte Dateien werden ebenfalls entfernt. Es ist nützlich, wenn Sie Ihren .gitignore durcheinander bringen und dort etwas Nützliches haben (wie in meinem Fall). ( git-scm.com/docs/git-clean )
Keeprock
1
Mit überschüssigen Ordnern git statuswird Ihnen das Arbeitsverzeichnis bereinigt - Lügen! git clean -dfhat diesen Job gemacht, danke.
Leo
5
Beachten Sie, dass git clean -dfDateien dauerhaft gelöscht werden. Auf UNIX-ähnlichen Systemen wird es aufgerufen unlink()und Ihre gelöschten Dateien können nicht wiederhergestellt werden.
Hanxue
11
Das OP fragt nach dem Aufheben der Bereitstellung der Dateien. Sie raten ihm, die Dateien zu löschen. Ich würde Ihnen empfehlen, vor der Beantwortung zu lesen, was der Bereitstellungsbereich ist.
Antony Hatchkins
Vielen Dank, dass Sie mein gesamtes nicht gespeichertes Projekt gelöscht haben.
Vansuita Jr.
7

Wie in anderen Antworten angegeben, sollten Sie verwenden git reset. Dies macht die Aktion des rückgängig git add -A.

Hinweis: git reset entspricht dem, git reset --mixedwas dies tut

Setzt den Index, aber nicht den Arbeitsbaum zurück (dh die geänderten Dateien werden beibehalten, aber nicht für das Festschreiben markiert) und meldet, was nicht aktualisiert wurde. Dies ist die Standardaktion. [ Git Reset ]

Dan Rosenstark
quelle
2
.. und um eine einzelne Datei aus dem Staging-Bereich zu entfernen , können Sie tungit reset filenameToNotCommit
SherylHohman
5

Jetzt bei v2.24.0 schlägt vor

git restore --staged .

Dateien zu entfernen.

norixxx
quelle
1

Sie können den Staging-Bereich auf verschiedene Arten zurücksetzen:

  1. Setzen Sie HEAD zurück und fügen Sie alle erforderlichen Dateien zum erneuten Einchecken wie folgt hinzu:

     git reset HEAD ---> removes all files from the staging area
     git add <files, that are required to be committed>
     git commit -m "<commit message>"
     git push 
    
Amit Kaneria
quelle
Was unterscheidet diese Antwort von den vorhandenen sechs Antworten?
Antony Hatchkins
1

So entfernen Sie alle Dateien aus dem Staging-Bereich: -
git reset
So entfernen Sie bestimmte Dateien:
git reset "File path"

Akash Bisariya
quelle
1

verwenden

git reset HEAD

Dadurch werden alle Dateien aus dem Staging-Bereich entfernt

Ajith
quelle
1

Wenn unerwünschte Dateien zum Staging-Bereich hinzugefügt, aber noch nicht festgeschrieben wurden, führt ein einfacher Reset die Aufgabe aus:

$ git reset HEAD file
# Or everything
$ git reset HEAD .

Verwenden Sie Folgendes, um nur nicht bereitgestellte Änderungen im aktuellen Arbeitsverzeichnis zu entfernen:

git checkout -- .
Vlad Bezden
quelle
0

Verwenden "git reset HEAD <file>... ", um Dateien zu entfernen

Beispiel: Alle Dateien entfernen

git reset HEAD .

eine Datei entfernen

git reset HEAD nameFile.txt
Amirouche Zeggagh
quelle
-3

Ich habe all diese Methoden ausprobiert, aber keine hat bei mir funktioniert. Ich entfernte .git Datei mit rm -rf .gitdem lokalen Repository Form und dann wieder tat git initund git addund Routine Befehle. Es funktionierte.

Bhaskar Dhariyal
quelle
4
Das Lesen der Git-Dokumente ist im Allgemeinen lohnender als das Befolgen der Ratschläge von xkcd.com/1597 ;)
Antony Hatchkins
1
Möglicherweise hatten Sie in Ihrem speziellen Fall ein Integritätsproblem, und dies war die verbleibende Option, die jedoch nicht empfohlen wird.
Shad
Bitte tu das nicht, du wirst dein gesamtes Git Repo zerstören.
Lennart Rolland
-5

Der beste Weg, um Ihre Datei, die sich bereits im Staging-Bereich befindet, rückgängig zu machen, ist git reset --hard, wodurch Ihre bereitgestellten Dateien zurückgesetzt werden. Vorsicht, jetzt werden abgestufte und nicht bereitgestellte Änderungen entfernt.

Pixendaten
quelle
2
Das ist falsch und gefährlich !!! OP möchte die Dateien danach "einfach manuell wieder hinzufügen", --hardlöscht sie jedoch für immer.
Antony Hatchkins